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 - 视图中的上下文处理器?的主要内容,如果未能解决你的问题,请参考以下文章