我一直在尝试为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等媒体目录。唯一看似“接受”模板的是管理部分。
答案 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
:
settings.py
文件所在的目录(对我来说这是R:\jeffy\programming\sandbox\python\django\tutorial\mysite\mysite\
)python
>>> import settings
>>> settings.TEMPLATE_DIRS
,输出['R:\\jeffy\\programming\\sandbox\\python\\django\\tutorial\\mysite\\templates']
因此,这是此项目的模板目录的预期位置。 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来查找它们,但是将主管理模板放在项目级别似乎是有意义的,因为管理站点不是特定于应用程序的,但可用于整个项目。