难以覆盖Django Admin模板

时间:2011-02-04 18:25:19

标签: django django-admin

我在Ubuntu 10.10上使用Django 1.2.4。我正在尝试覆盖admin模块的index.html模板。我一直关注这些instructions。我也看了这个question,但我仍然遇到了困难。

说明说在模板目录中创建一个admin目录:

templates/
    admin/
         index.html

我想覆盖index.html中的单个块。 (实际上,我想要做的就是在最后添加一些文字。是否有比复制/粘贴整个块并更改它更简单的方法?)(更新:看起来像{{block.super}}可能有帮助。)

要表明我压倒一切,我把它放在index.html的顶部:

{% extends "admin/index.html" %}

当然,这会导致堆栈溢出(来自终端):

Exception RuntimeError: 'maximum recursion depth exceeded in __subclasscheck__' in <type 'exceptions.RuntimeError'> ignored

这样做的正确方法是什么?我在链接问题的答案上尝试了一个符号链接,但结果如下:

me@mycomp:~/foo$ sudo ln -s /usr/local/lib/python2.6/dist-packages/django/contrib/admin/templates/ django_admin
[sudo] password for me: 
ln: creating symbolic link `django_admin': Protocol error

我做错了什么?

4 个答案:

答案 0 :(得分:13)

递归错误是因为您将自己扩展admin/index.html

你可以:

  • 复制admin/index.html目录中的整个templates/admin/模板,它将用您的模板替换默认模板
  • 覆盖每个应用或模型index.html,如here
  • 所述

我知道问题已经很晚了,但是你知道,google travel ...

答案 1 :(得分:7)

使用额外的模板文件夹修改settings.py,例如:

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    "/home/mysite/webapps/django/myproject/templates",
    "/home/mysite/webapps/django/lib/python2.7/django/",  # extra folder
)

然后在myproject / templates / admin中添加您自己的index.html,如:

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

{% block branding %}
    <h1 id="site-name">Administration for TheLittleButtonCo</h1>
{% endblock %}
显然,变化是可能的。这适用于Django 1.3.1 final

答案 2 :(得分:1)

不确定您是否找到答案,但需要更改

{% extends "admin/index.html" %}

{% extends "admin/base_site.html" %}

因为这是原始index.html页面覆盖的内容。因为Django系统在使用默认管理员之前搜索你的模板文件夹,所以在这种情况下它会在你的模板中找到admin / index.html,然后它试图用扩展来扩展自己(因此递归错误)。

作为参考,您也可以自定义模板中的base_site.html,它会扩展base.html。最好的办法是复制原文:

/usr/local/lib/python2.6/dist-packages/django/contrib/admin/templates/

并将其粘贴到您的模板文件夹中作为起点

答案 3 :(得分:1)

我使用了一个额外的包,名为django-smart-extends