扩展管理员的app change_form模板时无限递归

the*_*row 12 python django django-templates django-admin

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

{% extends "admin/change_form.html" %}
{% block extrahead %}
  {% include "dojango/base.html" %}
  {% block dojango_content %}
  {% endblock %}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

但是出于某种原因,它会抛出一个

TemplatesyntaxError: TemplateSyntaxError at /admin/cms/post/add/
Caught RuntimeError while rendering: maximum recursion depth exceeded while calling a Python object
Run Code Online (Sandbox Code Playgroud)

Fra*_*ank 13

我知道现在已经晚了,但......

如果扩展 - 这是一个比复制更好的选择 - 关键是让它命名除了 /admin/change_form.html.

(虽然OP提到template/admin/change_form.html,这只是因为他的TEMPLATE_DIRS元组中的路径以'/ 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'
Run Code Online (Sandbox Code Playgroud)

最后,如果坚持命名它 /admin/change_form.html,你可以 - 只要extends标签包含django安装的完整路径而不是相关的安装路径.