【问题标题】:Custom django admin templates not working自定义 django 管理模板不起作用
【发布时间】:2012-08-01 09:27:27
【问题描述】:

我一直在尝试为 Django 工作的管理页面获取自定义模板,但没有成功。我已经阅读了 django 文档和几个博客,它们解释它是一个如此简单的步骤,我认为是这样的。

到目前为止,管理页面可以正常工作,但我自己重写的 CSS 或模板无法正常工作。我的设置如下

/project_folder/
      manage.py
      settings.py
      urls.py
      __init__.py
      /app/
          views.py
          models.py
          __init__.py
          /templates/
                /admin/
                    base_site.html

在 urls.py 我有

(r'^admin/', include(admin.site.urls)),

由于我无法登录等原因,所以我假设 /admin/base_site.html 会覆盖默认的,但它没有做任何事情。

有人知道这里发生了什么吗?我从 Django 教程/指南中关注它,并访问了一些博客,看看他们是否有答案,但他们都说了同样的话。

编辑 1: 我的模板目录设置正确。

TEMPLATE_DIRS = (
    os.path.join(PROJECT_PATH, 'templates/'),
)

这可以正常工作,因为我的网站的其余部分都在使用 CSS 等媒体目录。唯一似乎不“接受”模板的是管理部分。

【问题讨论】:

  • 但这看起来不像你有正确的模板路径。您有项目/模板,但您的结构将其显示为项目/应用程序/模板。
  • 仔细阅读this section的文档很有帮助。

标签: python django django-admin django-templates


【解决方案1】:

我在浏览 Django 1.6.5 教程 (https://docs.djangoproject.com/en/1.8/intro/tutorial02/) 时遇到了同样的问题,但意识到不仔细阅读是个错误。您所做的教程是将其放入您的 settings.py 中:

TEMPLATES = [
  {  
      ...
     'DIRS': [os.path.join(BASE_DIR, 'templates')],
      ...
  }

然后,我将要为管理站点覆盖的模板文件夹放在应用程序下,就像您的示例一样:

/project_folder/
      manage.py
      settings.py
      urls.py
      __init__.py
      /app/
          views.py
          models.py
          __init__.py
          /templates/
                /admin/
                    base_site.html

由于与 Daniel Roseman 在其中一个 cmets 中提到的问题类似,它无法工作,我的 DIR 正在评估为 project_folder/templates(正如我告诉它的那样)。然后我注意到在教程中明确指出将templates/admin 文件夹放在项目级别,而不是应用级别:

在您的项目目录(包含 manage.py 的目录)中创建一个模板目录。模板可以存在于 Django 可以访问的文件系统上的任何位置。 (Django 以服务器运行的任何用户身份运行。)但是,将模板保留在项目中是一个很好的约定。

通过这样做,我得到了以下结构:

/project_folder/
      manage.py
      settings.py
      urls.py
      __init__.py 
      /templates/
          /admin/
              base_site.html
      /app/
          views.py
          models.py
          __init__.py

有了这个,一切都按预期工作(我可以覆盖管理页面的默认 django 模板)。

虽然您应该能够将模板放在任何地方并配置 Django 来查找它们,但将主管理模板放在项目级别似乎是有意义的,因为管理站点不是特定于应用程序的,但可用于整个项目。

【讨论】:

  • 我可以确认我遇到了同样的问题并忘记添加设置。DIRS 模板位置的路径。我很难找到,因为在另一个项目中(但使用 Django 1.9)设置了路径仍然没有工作,在这种情况下是因为 {{ site_header|default:_('Content Manager Interface') }} 需要用简单的文本替换。
【解决方案2】:

在此练习中应该避免再犯一个错误。练习说要改变这个......

<h1 id="site-name"><a href="{% url 'admin:index' %}"> {{ site_header|default:_('Django administration') }} </a></h1>

到这个...

<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>

有一种只改变字符串常量的诱惑,但这是不正确的。 IE。不要这样做,它不会改变标题:

<h1 id="site-name"><a href="{% url 'admin:index' %}"> {{ site_header|default:_('Polls Administration') }} </a></h1>

那是我犯的错误,我必须仔细地练习才能改正它。

【讨论】:

  • 我们必须在Projects/mysite/templates/admin/base_site.html 文件中执行此操作,对吗?
  • @halilpazarlama 是的,如果您按照docs.djangoproject.com/en/1.7/intro/tutorial02 上的教程进行操作
  • 谢谢,这可以通过删除 site_header|default:... 来实现。但是为什么我不能使用这个上下文变量,因为我没有覆盖 AdminSite Oblect 而是模板?如果我覆盖模板,所有原始变量都消失了吗?顺便说一句,我没有接触过 AdminSite 对象,但我确实使用了我的自定义 ModelAdmin 类。
【解决方案3】:

在 Django 教程的第二部分执行 this step 时,我无法识别管理模板。

我就是这样解决的:

使用this answer中的信息,我打印了TEMPLATE_DIRS的值:

  1. 在命令行中,导航到项目的settings.py 文件所在的目录(对我来说这是R:\jeffy\programming\sandbox\python\django\tutorial\mysite\mysite\
  2. 启动交互式shell:python
  3. &gt;&gt;&gt; import settings
  4. &gt;&gt;&gt; settings.TEMPLATE_DIRS,输出['R:\\jeffy\\programming\\sandbox\\python\\django\\tutorial\\mysite\\templates']

所以这是该项目的模板目录的预期位置。 admin 目录进入该目录,base_site.html 文件进入该目录。

我遇到的另一个问题是它正在运行,但我只更改了&lt;TITLE&gt; 字段,所以我没有注意到它。 (我以为我正在更改主标题。)

【讨论】:

  • “管理目录进入那个”
  • 我还将顶级目录命名为mysite 以及我的应用目录mysite,所以当我打印TEMPLATE_DIRS 并给出'/Users/username/dev/code/mysite/templates' 时,我读得太快了,以为我有对,但我没有像我一样在.../code/mysite/mysite/templates
  • 附注,import settings 对我不起作用,但 from mysite import settings 起作用。
【解决方案4】:

好的,我已修复它,这是一个愚蠢的错误,但过去 2 小时我已经在玩这个了。我必须在 django.contrib.admin 之前声明我的应用程序。否则它不会接受它。

【讨论】:

  • 仅供参考,我现在正在使用 Django 1.6.5 完成本教程,而我不必这样做。
  • 很高兴看到我不是唯一遇到此问题的人(显然至少还有 15 个人)。使用 Django 1.10,文档说 if 您自定义加载程序,更改目录顺序 - 但没有关于应用程序本身的内容。
  • 在 Django 2.2 中,我的自定义模板都会被加载,无论应用程序在哪里声明,只要在 settings.TEMPLATES 中正确设置了 DIRS,如 documentation 中所述。
【解决方案5】:

确保您已将TEMPLATE_DIRS 中的settings.py 设置为正确的文件夹!

【讨论】:

  • 我通过破坏默认模板(重命名为 base_site.htmlx)发现了我的问题,并且错误页面显示我的模板文件夹位于错误的位置。
猜你喜欢
  • 2018-09-07
  • 2016-03-01
  • 2013-05-04
  • 2013-02-03
  • 2017-02-19
  • 2013-12-04
  • 2021-10-31
  • 2011-03-29
相关资源
最近更新 更多