19

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

4

5 回答 5

26

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

于 2012-08-03T10:45:29.623 回答
23

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

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

那是我犯的错误,我必须仔细地完成练习才能修复它。

于 2014-11-23T13:52:56.843 回答
7

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

这就是我解决它的方法:

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

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

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

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

于 2014-07-23T01:42:00.263 回答
6

我在浏览 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

DIR由于与 Daniel Roseman 在其中一个评论中提到的问题类似,我正在评估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 来查找它们,但将主管理模板放在项目级别似乎是有意义的,因为管理站点不是特定于应用程序的,但可用于整个项目。

于 2015-10-29T21:55:01.603 回答
4

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

于 2012-08-03T10:34:41.673 回答