【问题标题】:How to pass RequestContext as an optional third argument to render_to_response如何将 RequestContext 作为可选的第三个参数传递给 render_to_response
【发布时间】: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


    【解决方案1】:

    这是非常基本的 Python:您不能引用当前范围内不存在的对象。

    幸运的是,所有从基 View 类继承的基于类的视图都将请求设置为实例变量,这意味着您可以将其引用为 self.request。另请注意,有一个较短的 render 快捷方式在内部使用 RequestContext,并将请求作为初始参数。所以:

    return render(self.request, 'Return_to_AMT.html', {
            'form_data': [form.cleaned_data for form in form_list],            
        }
    

    【讨论】:

    • 谢谢丹尼尔,你又来救我了,render 的小贴士。
    猜你喜欢
    • 1970-01-01
    • 2018-12-13
    • 2018-11-03
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 2021-10-19
    • 2020-04-07
    • 1970-01-01
    相关资源
    最近更新 更多