如果使用 Context({dict}) 与仅使用 {dict},则不会呈现 CSRF 令牌

CSRF token not rendered if using Context({dict}) vs just {dict}

有谁知道为什么以下内容使我的模板正常:

c= {'render_form' : form }
return render(request, 'page1.html', c)

但以下内容不呈现 csrf 令牌:

c= Context({'render_form' : form}) 
return render(request, 'page1.html', c)

模板如下所示:

<form method="post">
    {% csrf_token %}
    {{ render_form }}
     <input type="submit" value="Submit" class='btn' id="submitbutton" name="_submit" />
</form>

我想保留 render() 并且我想避免使用 locals()

取决于你的 Django 版本,但是 render 方法使用了两个上下文相关的参数,contextcontext_instance,后者需要一个 ContextRequestContext对象,第一个字典。该文档有一些具体的弃用细节:

https://docs.djangoproject.com/en/1.8/topics/http/shortcuts/#optional-arguments