我需要在所有模板中获取环境变量(例如:Mixpanel_Token),而则不在Django中创建新视图。
根据我在SO上阅读的内容,我应该使用模板上下文处理器。
context_processor在context_processors.py文件中定义:
from django.conf import settings
def settings_mixpanel(request):
ctx = {
"MIXPANEL_TOKEN": settings.MIXPANEL_TOKEN,
}
return ctx
在我的settings.py文件中:
TEMPLATE_CONTEXT_PROCESSORS = (
'utils.context_processors.settings_mixpanel',
)
我遇到的问题是如何在我的所有模板中将MIXPANEL_TOKEN
定义为上下文变量,因为我的所有视图都已在Django中创建。
我不希望使用render_to_response
函数重新创建类似下面的视图:
def index(request):
return render_to_response("index.html", {},context_instance=RequestContext(request))
答案 0 :(得分:4)
你不需要做任何特别的事情。只要您的模板使用RequestContext
呈现,您就可以使用{{ MIXPANEL_TOKEN }}
访问您的变量。
答案 1 :(得分:0)
它非常简单明了:上下文处理器由RequestContext(...)调用。如果不使用RequestContext(...),则不会使用上下文处理器,因此不具有任何值。您不一定需要使用render_to_response,但必须使用RequestContext。不管你喜不喜欢,这就是Django的工作方式。但是从我个人的观点来看,改变你现有的观点以使用RequestContext并不是一件大事,是吗?
答案 2 :(得分:0)
因为模板的自定义上下文处理器的Django 1.8注册表发生在:TEMPLATES-> OPTIONS -> context_processors
,请参阅此处以供参考:https://docs.djangoproject.com/en/1.10/ref/templates/upgrading/#the-templates-settings