1

我有一个 Django 项目,并且我已经覆盖了管理员 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 会以某种方式缓存页面的先前版本吗?

4

1 回答 1

0

Alasdair 指出了我的问题。我假设os.path.abspath(os.path.dirname(__name__))总是指向文件上一级的绝对目录settings.py。不幸的是,事实并非如此,我仍然不确定这个魔术代码应该如何工作。它似乎与您启动 python 解释器的目录有关。

就我而言,我是从/project_base/project_name(包含 settings.py 的目录)开始 gunicorn 的。从/project_base解决问题开始 gunicorn。

于 2013-07-15T16:27:46.363 回答