编辑:
我希望“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/