一尘不染

在Django中创建我自己的上下文处理器

django

我已经到了需要将某些变量传递到所有视图的地步(主要是自定义身份验证类型变量)。

有人告诉我编写自己的上下文处理器是执行此操作的最佳方法,但是我遇到了一些问题。

我的设置文件如下所示

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.contrib.messages.context_processors.messages",
    "sandbox.context_processors.say_hello", 
)

如你所见,我有一个名为“ context_processors”的模块和一个名为“ say_hello”的函数。

看起来像

def say_hello(request):
        return {
            'say_hello':"Hello",
        }

我是否可以假设自己现在可以在我的观点范围内进行以下操作?

{{ say_hello }}

现在,这在我的模板中什么也没有渲染。

我的观点看起来像

from django.shortcuts import render_to_response

def test(request):
        return render_to_response("test.html")

阅读 405

收藏
2020-03-29

共1个答案

一尘不染

你编写的上下文处理器应该可以工作。问题在你看来。

你确定要使用渲染视图RequestContext吗?

例如:

def test_view(request):
    return render_to_response('template.html')

上面的视图将不使用中列出的上下文处理器TEMPLATE_CONTEXT_PROCESSORS。确保你提供的RequestContext是这样的:

def test_view(request):
    return render_to_response('template.html', context_instance=RequestContext(request))
2020-03-29