要将一些内容添加到模型的django管理视图中,我想覆盖change_form.html
模板。根据文档,我需要在文件夹/project-path/templates/admin/appname/modelname/
中创建文件change_form.html
。当然,我需要确保,TEMPLATE_DIRS
也可以使用此路径。这样的文件看起来像这样:
{% extends "admin/change_form.html" %}
{% load i18n %}
{% block after_field_sets %}
SOME CONTENT
{% endblock %}
但是,我利用django-guardian具有对象权限。这个Django应用程序也覆盖了change_form.html
(效果很好 - 相关来源似乎在这里),但是Django并没有拾取我的模板扩展文件(即,从上面的示例中显示的"某些内容"未显示)。我要覆盖的块/零件不是不是 django-guardian覆盖的块,最终我想在我的模板的django-guardion 和的change_form.html
中加上添加。
我在这里做错了什么?并且根本可以使多个应用程序覆盖管理模板?
如果很感兴趣,这是我的TEMPLATE_LOADERS
设置:
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader'
)
另外,django-guardian是INSTALLED_APPS
数组中的最后一个应用。
一种可能的解决方案似乎是通过参考和覆盖django-guardian的模板(在此处定义)而不是Django的常规change_form.html
来明确定义继承链。因此,而不是使用
{% extends "admin/change_form.html" %}
在自定义模板的开头,我需要使用
{% extends "admin/guardian/model/change_form.html" %}
也需要扩展我的GuardedModelAdmin
子类模型,以明确使用自己的模板文件作为更改表单模板:
class MyModel(GuardedModelAdmin):
change_form_template = 'admin/appname/mymodel/change_form.html'
这有效,但它为模板和模型增加了明显的依赖性。当然,该模型无论如何都具有这种依赖性,但是如果还有一个仅指默认change_form.html
的解决方案,我会很感兴趣 - 但是,我怀疑这是不可能的。
如果您的模板路径在TEMPLATE_DIRS
中,则可以逆转TEMPLATE_LOADERS
的顺序。
如果您的模板在您的应用中,则需要在 django-guardian之后添加应用程序 in INSTALLED_APPS
array。
基本上,如果有名称碰撞,则将使用 Last 将使用已加载的模板。