无法在Django模板/视图中显示CSRF令牌

时间:2014-08-23 05:03:04

标签: django django-csrf

我试图使用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应用,则已经涵盖了

我确定我只是遗漏了一些基本内容,但任何有助于解释可能内容的帮助都会非常感激。

1 个答案:

答案 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 %}