无限递归,同时扩展管理员的app change_form temp

2024-10-01 13:42:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我在template/admin/change_form.html中有以下模板:

{% extends "admin/change_form.html" %}
{% block extrahead %}
  {% include "dojango/base.html" %}
  {% block dojango_content %}
  {% endblock %}
{% endblock %}

但是由于某种原因它抛出了一个

^{pr2}$

Tags: form模板baseincludeadminhtmltemplatecontent
3条回答

您在admin/change_form.html中,并且扩展了admin/change_form.html。不能扩展您所在的同一模板。在

您可能期望,如果您从管理应用程序重写模板,您可以扩展您重写的模板。但这不是它的工作原理。重写模板时,无法访问它。在

解决问题的方法是复制原始模板并更改您不喜欢的内容。在

我知道很晚了,但是。。。在

如果扩展(这是一个比复制好得多的选项),关键是要将它命名为除/admin/change_form.html之外的任何名称。在

(尽管OP引用了template/admin/change_form.html,但这只是因为他的TEMPLATE_DIRS tuple中的路径以'/TEMPLATE'结尾—我的路径通常以'/templates'结尾—但是,这些目录可以命名为任何名称,并且可以位于任何位置。)

如果命名为/admin/<MyAppName>/change_form.html,它将在每个应用程序的基础上自动使用

如果命名为/admin/<MyAppName>/<MyModelName>/change_form.html,它将在每个模型的基础上自动使用

如果在ModelAdmin中显式指定,则可以将其命名为任何名称

class MyModelAdmin(admin.ModelAdmin):
    change_form_template = 'subdir/my_change_form.html'

最后,如果坚持将其命名为/admin/change_form.html,则可以-前提是extends标记包含到django安装的完整路径,而不是相对路径。在

另外,您可以使用change_form_template属性将您的AdminOptions类指向另一个模板。在

比如:

class MyOptions(AdminOptions):
    change_form_template = 'myapp/my_change_form.html'

myapp/my_change_form.html

^{pr2}$

相关问题 更多 >