-1

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

3 回答 3

4

你不需要做任何特别的事情。只要您的模板是使用 呈现的RequestContext,您就可以使用 访问您的变量{{ MIXPANEL_TOKEN }}

于 2012-10-11T11:18:08.953 回答
0

这非常简单直接:上下文处理器由 RequestContext(...) 调用。如果您不使用 RequestContext(...),则不会使用上下文处理器,因此将没有任何价值。你不一定需要使用render_to_response,但RequestContext是必须的。不管你喜不喜欢,这就是 Django 的工作方式。但是从我个人的角度来看,改变你现有的视图来使用 RequestContext 并不是什么大事,不是吗?

于 2012-10-11T11:55:03.133 回答
0

因为 Django 1.8 为模板注册自定义上下文处理器是通过以下方式发生的:TEMPLATES-> OPTIONS -> context_processors请参阅此处以供参考:https ://docs.djangoproject.com/en/1.10/ref/templates/upgrading/#the-templates-settings

于 2018-03-20T00:04:19.847 回答