【问题标题】:Difficulty overriding Django Admin template难以覆盖 Django Admin 模板
【发布时间】:2011-06-21 13:18:12
【问题描述】:

我在 Ubuntu 10.10 上使用 Django 1.2.4。我正在尝试覆盖管理模块的 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

我做错了什么?

【问题讨论】:

    标签: django django-admin


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      用一个额外的模板文件夹修改 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

      【讨论】:

      • 如何在不硬编码的情况下指定 jdango 安装路径?
      • @maazza: import django; os.path.dirname(django.__file__)
      【解决方案3】:

      递归错误是因为您正在扩展 admin/index.html 本身。

      您可以:

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

      我知道这个问题已经晚了,但你知道,谷歌旅行......

      【讨论】:

        【解决方案4】:

        不确定你是否找到了答案,但你需要改变

        {% 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/
        

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

        【讨论】:

          猜你喜欢
          • 2015-03-16
          • 2017-08-23
          • 2017-01-10
          • 2023-04-03
          • 2018-04-13
          • 2019-07-02
          • 2020-02-18
          • 2017-05-26
          • 2013-08-14
          相关资源
          最近更新 更多