【问题标题】:Django - context processors in the view?Django - 视图中的上下文处理器?
【发布时间】: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之后?
  • 还是不行……

标签: python django


【解决方案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 和模板中进行更改才能使其正常工作。
猜你喜欢
  • 1970-01-01
  • 2011-10-01
  • 2016-07-01
  • 1970-01-01
  • 2013-02-22
  • 2012-06-05
  • 1970-01-01
  • 1970-01-01
  • 2011-01-15
相关资源
最近更新 更多