我有一个Django项目,我已经覆盖了admin base_site.html,将“Django Administration”更改为“XXX Administration”。这在Windows 7上运行正常。但是在我的Ubuntu机器上,当我访问/ admin时,它仍然告诉我“Django Administration!”
现在这是非常奇怪的部分......在Ubuntu上,我可以运行./manage.py shell并执行此操作:
import django.template.loader as loader
from django.template.context import Context
s = loader.get_template('admin/base_site.html')
print s.render(Context())
它给了我:
....
<div id="branding">
<h1 id="site-name">XXX administration</h1>
</div>
....
现在我不知道为什么模板加载器正在加载正确的文件,但管理页面仍然想要呈现错误的模板,并且只在Ubuntu上!我觉得我疯了。我尝试重启服务器。在Ubuntu上,服务器通过nginx反向代理在gunicorn上运行。
/project_base/templates/admin/base_site.html
{% extends "admin/base.html" %}
{% load i18n %}
{% block title %}{{ title }} | {% trans 'XXX site admin' noop %}{% endblock %}
{% block branding %}
<h1 id="site-name">{% trans 'XXX administration' noop %}</h1>
{% endblock %}
{% block nav-global %}{% endblock %}
/project_base/project_name/settings.py
PROJECT_PATH = os.path.abspath(os.path.dirname(__name__))
TEMPLATE_DIRS = (
os.path.join(PROJECT_PATH, 'templates')
)
编辑:
我认为这与gunicorn / nginx有关。我通过./manage.py runserver 7777 &
启动了另一个服务器实例,然后curl http://localhost:7777/admin/
向我显示正在显示正确的标题。但curl http://localhost:80/admin
仍在给我“Django Administration”。 nginx可以以某种方式缓存该页面的先前版本吗?
答案 0 :(得分:0)
阿拉斯戴尔向我指出了这个问题。我假设os.path.abspath(os.path.dirname(__name__))
始终指向距settings.py
文件一级的绝对目录。不幸的是,事实并非如此,我仍然不确定这个神奇的代码是如何工作的。它似乎与启动python解释器的目录有关。
在我的情况下,我从/project_base/project_name
(包含settings.py的目录)开始使用gunicorn。从/project_base
开始枪手修复了问题。