Django 教程 自定义管理模板

3 投票
1 回答
2950 浏览
提问于 2025-04-17 16:19

我正在学习官方的Django教程。在第二部分的最后,他们让你稍微自定义一下管理员界面模板(比如修改一些标题文字)。我觉得我做的都没错,但显然我还是出错了,因为在运行syncdb并重启服务器后,管理员网站看起来还是一模一样的。我的项目目录(不包括虚拟环境的部分)是这样的:

mysite
├── manage.py
├── mysite
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── urls.py
│   ├── urls.pyc
│   ├── wsgi.py
│   └── wsgi.pyc
├── polls
│   ├── admin.py
│   ├── admin.pyc
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── models.py
│   ├── models.pyc
│   ├── tests.py
│   └── views.py
└── templates
    └── admin
        └── base_site.html

在settings.py文件中,我添加了这些代码,让项目使用templates/admin中的模板:

import os
PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))

接下来:

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

我尝试了几种不同的斜杠组合和给PROJECT_PATHTEMPLATE_DIRS赋值的变化,但都没有成功。每次我都确认它确实生成了一个文件路径字符串(用简单的打印语句检查过)。

为了看看发生了什么,我编辑了Django原始的base_site.html文件,它在管理员文件夹里,这样我的网站就发生了变化,所以显然它还是在使用那个文件。我看了好几个StackOverflow的帖子,但我真的不知道该怎么办了。

哦,如果有关系的话:我用的是Python 2.7.3和Django 1.4.3。

1 个回答

4

首先,我建议你删除你的 *.pyc 文件,因为这些文件里面可能存有过时的信息,有时候会导致类似的问题。

如果这样做还不行,那我建议你再仔细检查一下你的 PROJECT_PATH,我觉得这可能是问题所在。

dirname 是用来获取包含目录的。所以如果这行代码在 settings.py 文件里,它会返回 /path/to/inner/mysite,也就是在主 mysite 里面的那个。如果你的内层 mysite 里没有 templates 目录,那就会出问题。

你需要做的是这样。

PROJECT_PATH = os.path.realpath(os.path.dirname(os.path.dirname(__file__))) 

这样做之后,结合 templates 就能返回正确的外层 mysite 路径。

一切应该就能正常工作了。

撰写回答