Django - 视图中的上下文处理器?

Posted

技术标签:

【中文标题】Django - 视图中的上下文处理器?【英文标题】:Django - context processors in the view? 【发布时间】:2018-02-04 14:38:01 【问题描述】:

Django 中的上下文处理器通常允许所有模板访问一个变量。如何在 views.py(后端)代码中访问此变量?

这是我尝试过的:

def index(request):
    request_context = RequestContext(request)
    center =  request_context.get("center")

但我得到中心变量的“无”。

并在上下文处理器代码中:

def center(request):
return 'center': '123'

我已将上下文处理器的“中心”功能添加到设置中的上下文处理器列表中。

【问题讨论】:

您是否在TEMPLATE_CONTEXT_PROCESSORS(如果您使用的是 Django TEAMPLATES['OPTIONS']['context_processors'](Django >= 1.8)内的设置中添加了上下文处理器? 我在设置中的 TEMPLATES -> OPTIONS -> context_processors 列表中添加了它。 嗯它应该可以工作,确保你的自定义上下文处理器在django.template.context_processors.request之后? 还是不行…… 【参考方案1】:

使用decorators 而不是context_processors。这对你来说真的很简单。 在views.py 中,在要从中获取变量的函数之前使用@csrf_exempt,并在模板中要使用该变量的行的末尾使用% csrf_token %。Official documentation on csrf decorators

如果您需要查看示例,请查看this。在 template/add_comment.html 和 views.py 中使用了装饰器。

注意:- 您需要在 views.py 中导入 csrf_exempt 才能使用它,例如:-from django.views.decorators.csrf import csrf_exempt

【讨论】:

感谢您的回答。但我想知道如何在views.py代码中使用这些变量,而不是在模板代码中。 您必须在 views.py 和模板中进行更改才能使其正常工作。

以上是关于Django - 视图中的上下文处理器?的主要内容,如果未能解决你的问题,请参考以下文章

django上下文处理器

什么时候适合使用 Django 上下文处理器?

Django上下文处理器

Django之上下文处理器

如何在Django中访问子模板中的会话变量?

Yesod 布局中的站点范围变量(django 上下文处理器模拟)