ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-07-18 08:55:41  阅读:170  来源: 互联网

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


编辑:
我希望’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()

解决方法:

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

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

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

正如Django return redirect() with parameters中所解释的,最简单的方法是将数据放入会话中.在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,django,django-templates,django-views,django-forms
来源: https://codeday.me/bug/20190718/1494655.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有