python - 将表单数据从 View 发送到模板

标签 python django django-forms django-templates django-views

编辑:
我希望“success_url”(即 result.html)显示来自“form.process()”的“数据”。下面的代码显然是行不通的。 任何人都可以告诉我它有什么问题或建议另一种方法来基本上查看模板中的上下文“数据”(以列表或字典的形式),即在表单完成后向用户显示数据的更好方法已提交。
非常感谢。

-- 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()

最佳答案

据我了解您的问题,您想在结果 View 中显示用户提交的表单的内容。对吗?

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

FormView 的 form_valid 方法将对 success_url 进行 HttpResponseRedirect。所以现在的问题是,我们如何才能将数据提供给这个 View 。

Django return redirect() with parameters 中所述最简单的方法是将数据放入 session 中。在 result.html 模板中,您可以按照 Django: accessing session variables from within a template? 中的说明访问此数据。

代码如下:

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)

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

{{ request.session.temp_data }}

关于python - 将表单数据从 View 发送到模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12717054/

相关文章:

python - 一种优雅、更短的方式来解决字母等级分配问题

Python/ NumPy /Scipy : Draw Poisson random values with different lambda

python - 更改 Django 应用程序的 Python 包路径

django - 禁止使用没有 'fields' 属性的 ModelFormMixin

python - SMTPSenderRefused - 553,发件人地址未验证 - Django 电子邮件表单

python - 处理多个 Python 版本和 PIP?

python - 放置在时间轴上的箱线图

python - 在 Django 的 DetailView 中使用 get_object() 和aggregate()

django - CSRF 失败 : CSRF token missing or incorrect

Django:正确显示一个字段的多个错误消息