Django管理模板拒绝在ubuntu上重写?

时间:2013-07-15 15:41:02

标签: django django-templates

我有一个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可以以某种方式缓存该页面的先前版本吗?

1 个答案:

答案 0 :(得分:0)

阿拉斯戴尔向我指出了这个问题。我假设os.path.abspath(os.path.dirname(__name__))始终指向距settings.py文件一级的绝对目录。不幸的是,事实并非如此,我仍然不确定这个神奇的代码是如何工作的。它似乎与启动python解释器的目录有关。

在我的情况下,我从/project_base/project_name(包含settings.py的目录)开始使用gunicorn。从/project_base开始枪手修复了问题。