Django 1.5扩展了admin / change_form.html对象工具

时间:2013-08-12 20:53:30

标签: python django recursion django-templates django-admin

我是Django的新手,但我真的非常喜欢它。但偶尔我似乎遇到了一些我似乎没有把事情弄清楚的地方。所以,我要求一些帮助和指导。

我正在尝试为我的某个模型扩展对象工具,以便我可以在历史记录旁边有一个“打印”按钮。

我的模板如下:

project/app/templates/admin/

成功扩展base_site.html而没有任何问题。

project/app/templates/admin/base_site.html

然而,当我像这样添加change_form.html时:

project/app/templates/admin/change_form.html

以下内容:

{% extends 'admin/change_form.html' %}

{% block object-tools %}
    <a href="one">One</a>
    <a href="one">Two</a>
{% endblock %}

我得到一个例外:调用Python对象时超出了最大递归深度

这似乎让我遗漏了一些非常基本的东西。

我尝试过的事情:

  • {%block%}
  • 的许多变体
  • 扩展base_site,base等...
  • 添加/ model作为路径的一部分(project / app / templates / admin / model / change_form.html)

我很困惑,也没有成功。

P.S。:我也在这里使用引导主题http://riccardo.forina.me/bootstrap-your-django-admin-in-3-minutes/但是出于这个问题的目的,我目前还没有使用它。

3 个答案:

答案 0 :(得分:5)

问题是admin/change_form.html块中的{% extend %}被解析为project/app/templates/admin/change_form.html

一种解决方案是创建一个以您的应用命名的templates子目录 - 可能是project/templates/admin/app/change_form.html

  

要覆盖其中一个或多个,首先在项目的templates目录中创建一个admin目录。这可以是您在TEMPLATE_DIRS中指定的任何目录。

     

在此管理目录中,创建以您的应用命名的子目录。

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-vs-replacing-an-admin-template

答案 1 :(得分:2)

那是因为你正在自己扩展模板。我所做的是将我的自定义管理模板放在templates/admin中。然后在同一文件夹中我将符号链接到django管理文件夹(templates/admin/admin)。

所以我的扩展看起来像:

 {% extends 'admin/admin/change_form.html' %}

如果您想沿着这条路走下去,请务必覆盖index.html

答案 2 :(得分:0)

我找到的最好的方法是使用'..'上几个目录,然后返回到只能在Django代码库中找到的目录。

由于Django模板类似于"django/contrib/admin/templates/admin",我发现这对我有用:

{% extends "../../admin/templates/admin/change_form.html" %}

如果仍然会导致与其他结构发生冲突,您可以更进一步:

{% extends "../../../contrib/admin/templates/admin/change_form.html" %}

甚至:

{% extends "../../../../django/contrib/admin/templates/admin/change_form.html" %}

虽然它有点hacky,但至少通过执行上述操作,您不必使用其他涉及复制django源或设置符号链接的技术。