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

时间:2012-08-03 10:27:18

标签: python django django-admin django-templates

我一直在尝试为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等媒体目录。唯一看似“接受”模板的是管理部分。

5 个答案:

答案 0 :(得分:25)

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

答案 1 :(得分:19)

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

<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>

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

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

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

答案 2 :(得分:7)

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

这就是我解决它的方法:

使用this answer中的信息,我打印了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']
  5. 因此,这是此项目的模板目录的预期位置。 admin目录进入该目录,base_site.html文件进入该目录。

    我遇到的另一个问题是 正在工作,但我只更改了<TITLE>字段,所以我没注意到它。 (我以为我正在改变主标题。)

答案 3 :(得分:4)

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

答案 4 :(得分:4)

我在阅读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在其中一条评论中提到的问题相似,我的DIR正在评估project_folder/templates(正如我所说的那样),因此它不会起作用。至)。然后我在教程中注意到它明确表示将templates/admin文件夹放在项目级别,而不是应用程序级别:

  

在项目目录中创建一个templates目录(包含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来查找它们,但是将主管理模板放在项目级别似乎是有意义的,因为管理站点不是特定于应用程序的,但可用于整个项目。