自定义django管理模板无法正常工作

Yon*_*han 16 python django django-templates django-admin

我一直在尝试为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
Run Code Online (Sandbox Code Playgroud)

在urls.py我有

(r'^admin/', include(admin.site.urls)),
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为我无法登录等.所以我假设/admin/base_site.html将覆盖默认的一个,但它没有做任何事情.

有谁知道这里发生了什么?我从Django教程/指南中跟踪它,然后进入一些博客,看看他们是否有答案,但他们都说了同样的话.

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

TEMPLATE_DIRS = (
    os.path.join(PROJECT_PATH, 'templates/'),
)
Run Code Online (Sandbox Code Playgroud)

这可以正常工作,因为我让我的网站的其余部分使用CSS等媒体目录.唯一看似"接受"模板的是管理部分.

Yon*_*han 25

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

  • 仅供参考我现在正在阅读Django 1.6.5的教程,我没有必要这样做才能工作. (2认同)
  • 很高兴看到我不是唯一有这个问题的人(显然至少还有15个人).使用Django 1.10,文档说_if_之类的东西你自定义加载器,改变你的目录顺序 - 但没有关于应用程序本身. (2认同)

M. *_*ter 20

还有一个人应该拒绝参加这项运动的错误.演习说要改变这个......

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

对...

<h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a></h1>
Run Code Online (Sandbox Code Playgroud)

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

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

这就是我犯的错误,我必须仔细检查才能修复它.


ali*_*ind 7

在Django教程的第二部分中执行此步骤时,我无法识别管理模板.

这就是我解决它的方式:

使用这个答案中的信息,我打印了以下值TEMPLATE_DIRS:

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

因此,这是此项目的模板目录的预期位置.管理目录进入该目录,base_site.html文件进入该目录.

其他的问题,我是,它工作,但我只改变了<TITLE>外地,所以我只是没有注意到它.(我以为我正在改变主标题.)


Ray*_*Ray 6

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

TEMPLATES = [
  {  
      ...
     'DIRS': [os.path.join(BASE_DIR, 'templates')],
      ...
  }
Run Code Online (Sandbox Code Playgroud)

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

/project_folder/
      manage.py
      settings.py
      urls.py
      __init__.py
      /app/
          views.py
          models.py
          __init__.py
          /templates/
                /admin/
                    base_site.html
Run Code Online (Sandbox Code Playgroud)

有了这个,它就不会起作用,原因类似于你在评论中提到的 Daniel Roseman 所指出的问题,我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
Run Code Online (Sandbox Code Playgroud)

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

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


Ber*_*ant 5

确保您已设置TEMPLATE_DIRSsettings.py正确的文件夹!