Django:在所有模板中定义模板上下文处理器,而不创建新视图

时间:2012-10-11 11:07:25

标签: django django-templates

我需要在所有模板中获取环境变量(例如: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))

3 个答案:

答案 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