Django:当管理模板已经被覆盖时,它们不能覆盖吗?



要将一些内容添加到模型的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 将使用已加载的模板。

相关内容

  • 没有找到相关文章

最新更新