将表单数据从视图发送到模板

DGT*_*DGT 3 python django django-templates django-forms django-views

编辑:
我希望'success_url'(即result.html)显示'form.process()'中的'data'.以下代码显然不起作用.任何人都可以告诉我它有什么问题或建议另一种方法来基本上查看模板中的上下文"数据"(以列表或字典的形式),即在表单形式之后向用户显示数据的更好方法提交.
提前谢谢了.

-- urls.py --
url(r'^$', view='main_view'),
url(r'^result/$', view='result_view'),

-- views.py --
class ResultView(TemplateView):
    template_name = "result.html"

class MainView(FormView):
    template_name = 'index.html'
    form_class = UserInputForm
    success_url = 'result/'

    def form_valid(self, form):
        data = form.process()
        return super(MainView, self).form_valid(form)

    def get_context_data(self, **kwargs):
        context = super(MainView, self).get_context_data(**kwargs)
        context['data'] = data
        return context

main_view = MainView.as_view()
result_view = ResultView.as_view()
Run Code Online (Sandbox Code Playgroud)

Dan*_*tar 9

据我所知,您希望在结果视图中显示用户提交表单的内容.那是对的吗?

在这种情况下,方法get_context_data根本不会帮助您,因为它只会将数据存储在MainView中的当前上下文中.

FormView的form_valid方法将使HttpResponseRedirect成为success_url.所以现在的问题是,我们如何才能将数据提供给这个视图.

正如Django中所解释的,使用参数返回redirect()最简单的方法是将数据放入会话中.在result.html模板中,您可以按照Django中的说明访问此数据:从模板中访问会话变量?

这是代码:

class ResultView(TemplateView):
    template_name = "result.html"

class MainView(FormView):
    template_name = 'index.html'
    form_class = UserInputForm
    success_url = 'result/'

    def form_valid(self, form):
        self.request.session['temp_data'] = form.cleaned_data
        return super(MainView, self).form_valid(form)
Run Code Online (Sandbox Code Playgroud)

在result.html模板中,您可以访问此temp_data,以便:

{{ request.session.temp_data }}
Run Code Online (Sandbox Code Playgroud)