我试图使用Django ListView
子类来生成一个带有表单的页面。它是一个旧的学校手册HTML表单,而不是Django生成的表单(虽然我也在同一页面的其他地方有一个Django生成的表单)。由于Django使用CSRF身份验证,我需要在该表单中包含CSRF令牌以使其正常工作。
然而,即使在查看了几个相关的Stack Overflow帖子(并相应修复了相关内容)之后,我也没有太多运气。
基本上我在get
子类上有一个ListView
方法,并且我已经使用方法装饰器用CSRF装饰器来装饰它:
class FooView(ListView):
@method_decorator(ensure_csrf_cookie)
def get(self, request):
# code for otherwise working view
在我的模板中,我有:
<form>
{% csrf_token %}
然而,当我在呈现页面后查看页面的来源时,我只看到:
<form>
(没有CSRF令牌)。
我没有明确地将CSRF令牌添加到上下文中,因为我正在使用ListView
,并且按照https://docs.djangoproject.com/en/1.6/ref/contrib/csrf:
如果您使用的是通用视图或contrib应用,则已经涵盖了
我确定我只是遗漏了一些基本内容,但任何有助于解释可能内容的帮助都会非常感激。
答案 0 :(得分:1)
您需要导入:
from django.template import RequestContext
然后像这样使用它:
def example():
# Some code
return render_to_response('my_example.html', {
'Example_var':my_var
}, context_instance=RequestContext(request))
这会强制显示{% csrf_token %}
。