TEMPLATE_CONTEXT_PROCESSORS中包含的变量不在DEBUG = False的模板中

时间:2013-04-18 13:44:43

标签: python django django-templates

当我在django 1.5中的设置文件中设置DEBUG=False时,我无法再访问我的django模板中的TEMPLATE_CONTEXT_PROCESSORS应加载的STATIC_URL或任何其他变量。奇怪的是,一切都在DEBUG=True时有效。为了它的价值,我的'django.core.context_processors.static'肯定有TEMPLATE_CONTEXT_PROCESSORS,所以这不是问题。我还在我的模板上下文中检查了一些其他变量,似乎没有其他任何变量。 MEDIA_URL?不。 request?不。 See this example on github(已使用解决方案进行了更新),但这些是DEBUG=True时正常工作的重要部分,并在DEBUG=False时抛出500错误:

# settings.py
from django.conf.global_settings import *
# ...
TEMPLATE_CONTEXT_PROCESSORS += (
    'django.core.context_processors.request',
)
# believe it or not, 'django.core.context_processors.static' is in there
print TEMPLATE_CONTEXT_PROCESSORS 

# views.py
from django.template import RequestContext
from django.shortcuts import render_to_response
def wtf(request):
    return render_to_response(
        "wtf.html", {}, 
        context_instance=RequestContext(request)
    )

当您关闭调试模式时,django 1.5中是否会发生特殊情况?任何修复和/或调试问题的建议都将不胜感激!

2 个答案:

答案 0 :(得分:0)

看起来Django 1.2和1.3之间存在变化。

如果您希望模板在调试模式之外可以使用django.core.context_processors.static,则必须在TEMPLATE_CONTEXT_PROCESSORS中加入STATIC_URL

您还需要确保在渲染模板时使用RequestContext实例。

答案 1 :(得分:0)

可以通过编辑settings.py中的ALLOWED_HOSTS变量来解决此问题。有关详细信息,请参阅this answer

要将此设置为work on localhost,请设置ALLOWED_HOSTS = ['localhost']