如何覆盖和扩展基本的Django管理模板?

172

如何在扩展它的同时覆盖管理模板(例如admin/index.html)(请参见https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-vs-replacing-an-admin-template)?

首先,我知道这个问题以前已经被问过和回答过了(请参见Django: Overriding AND extending an app template),但是正如答案所说,如果您正在使用app_directories模板加载器(大多数情况下都是如此),它并不直接适用。

我的当前解决方法是制作副本并从中进行扩展,而不是直接从管理模板进行扩展。这很好用,但当管理模板更改时会增加额外的工作量并且容易混淆。

我可以想到一些自定义扩展标签来处理这些模板,但如果已经存在解决方案,我就不想重复造轮子。

顺便说一句:有人知道Django本身是否会解决这个问题吗?


2
复制管理员模板,扩展它们并覆盖/添加块是最有效的工作流程,虽然不是Django当前状态下的最佳工作流程。在我三年的使用中,我没有看到其他方法来做你试图要做的事情 :) - Brandon Taylor
1
嗯,我不知道这是好事还是坏事,但至少像你这样的人得出了相同的结论。听到这个消息很高兴。 :) - Semmel
12个回答

0

这个网站提供了一个简单的解决方案,适用于我的Django 1.7配置。

首先:在您的项目模板/template目录下创建一个名为admin_src的符号链接,指向您安装的Django模板。对于我来说,在Dreamhost上使用虚拟环境,我的“源”Django管理模板位于:

~/virtualenvs/mydomain/lib/python2.7/site-packages/django/contrib/admin/templates/admin

第二步:在 templates/ 目录下创建一个 admin 文件夹。

这样,我的项目的 template/ 目录现在看起来像这样:

/templates/
   admin
   admin_src -> [to django source]
   base.html
   index.html
   sitemap.xml
   etc...

第三步: 在您的新模板/admin/目录下创建一个名为base.html的文件,并添加以下内容:

{% extends "admin_src/base.html" %}

{% block extrahead %}
<link rel='shortcut icon' href='{{ STATIC_URL }}img/favicon-admin.ico' />
{% endblock %}

第四步:将您的管理图标 favicon-admin.ico 添加到静态根目录 img 文件夹中。

完成。很简单。


-1

你可以使用django-overextends,它为Django提供了循环模板继承。

它来自于Mezzanine CMS,Stephen将其提取为一个独立的Django扩展。

更多信息请参见Mezzanine文档中的“覆盖与扩展模板”(http:/mezzanine.jupo.org/docs/content-architecture.html#overriding-vs-extending-templates)。

要深入了解,请查看Stephen的博客“Django的循环模板继承”(http:/blog.jupo.org/2012/05/17/circular-template-inheritance-for-django)。

在Google Groups中有讨论(https:/groups.google.com/forum/#!topic/mezzanine-users/sUydcf_IZkQ),这启动了该功能的开发。

注意:

我没有足够的声望添加超过2个链接。但我认为这些链接提供了有趣的背景信息。所以我省略了“http(s):”后面的斜杠。也许有更好声望的人可以修复链接并删除此注释。


自从Django 1.9以来,这个项目已经不再相关了,维护者只是没有宣传它,请参见https://code.djangoproject.com/ticket/15053和https://github.com/stephenmcd/django-overextends/pull/37。要完全控制从哪个应用程序加载模板,可以使用django-apptemplates和django-app-namespace-template-loader,如果您想从一个应用程序扩展到另一个应用程序,则两者仍然相关。 - benjaoming

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接