要将某些内容添加到模型的Django管理视图中,我想覆盖change_form.html
模板。根据{{3}},我需要在文件夹change_form.html
中创建文件/project-path/templates/admin/appname/modelname/
。当然,我需要确保TEMPLATE_DIRS
中也可以使用此路径。这样的文件看起来像这样:
{% extends "admin/change_form.html" %}
{% load i18n %}
{% block after_field_sets %}
SOME CONTENT
{% endblock %}
但是,我使用documentation来获得对象权限。这个Django应用程序也会覆盖change_form.html
(工作正常 - 相关源似乎是django-guardian),但是Django没有拿起我的模板扩展文件(即上面示例中的“SOME CONTENT”)没有显示)。我要覆盖的块/部分不与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
数组中的最后一个应用。
答案 0 :(得分:3)
一种可能的解决方案似乎是通过引用和覆盖django-guardian的模板(定义{{3}})而不是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
的解决方案,我会感兴趣 - 但是,我怀疑这不可能。
答案 1 :(得分:3)
如果您的模板路径位于TEMPLATE_DIRS
,那么您可以改变TEMPLATE_LOADERS
的顺序。
如果您的应用中有模板,那么您需要在INSTALLED_APPS
数组中 django-guardian之后添加
基本上,如果存在名称冲突,则最后加载的模板将被使用。