【发布时间】:2014-10-10 11:16:10
【问题描述】:
我在使用 csrf 令牌时遇到了一些问题,我认为该问题与使用 SessionWizardview done() 方法有关,该方法使用 render_to_response,因此是 Context 实例而不是 RequestContext。 From the Django Documentation
如果你使用 Django 的 render_to_response() 快捷方式来填充 带有字典内容的模板,您的模板将是 默认情况下传递一个 Context 实例(不是 RequestContext)。使用一个 RequestContext 在你的模板渲染中,传递一个可选的第三个 render_to_response() 的参数:一个 RequestContext 实例。你的代码 可能看起来像这样:
def some_view(request): # ... return render_to_response('my_template.html', my_data_dictionary, context_instance=RequestContext(request))
显然 RequestContext 总是使用 django.core.context_processors.csrf 来自同一个文档:
除了这些之外,RequestContext 总是使用 django.core.context_processors.csrf。这是一个与安全相关的 管理员和其他 contrib 应用程序所需的上下文处理器,以及, 万一发生意外错误配置,它会被故意硬编码 在并且不能被 TEMPLATE_CONTEXT_PROCESSORS 关闭 设置。
但我无法将可选的第三个参数附加/传递给我的“done()”方法
class SurveyWizardOne(SessionWizardView):
def get_context_data(self, form, **kwargs):
....
....
def done(self, form_list, **kwargs):
return render_to_response('Return_to_AMT.html', {
'form_data': [form.cleaned_data for form in form_list],
}, context_instance=RequestContext(request))
当我使用上述内容时,当用户提交表单时,我收到以下错误。
异常值:未定义全局名称“请求”
谁能告诉我我做错了什么?
【问题讨论】:
标签: django django-forms django-views