4

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

4 回答 4

10

据我了解您的问题,您希望在结果视图中显示用户提交表单的内容。那是对的吗?

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

FormView 的 form_valid 方法会对 success_url 进行 HttpResponseRedirect。所以现在的问题是,我们怎样才能给这个视图提供数据。

正如Django return redirect() with parameters中所解释的,最简单的方法是将数据放入会话中。在 result.html-template 中,您可以按照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)

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

{{ request.session.temp_data }}
于 2012-10-10T09:53:33.520 回答
1

如上所述,您可以覆盖get_context_data.

例如,您可以执行以下操作:

def get_context_data(self, **kwargs):
    context = super(MainView, self).get_context_data(**kwargs)
    #set some more context below.
    context['foo'] = bar
    ...
    return context
于 2012-10-03T22:27:56.527 回答
0

在上下文中查找基于get_context_dataDjango类的视图文档。被覆盖的dict方法返回的值将被传递到模板中。

于 2012-10-03T21:24:59.090 回答
0

有几件事可能是您的问题。首先,在方法中,在调用该类的 parent之前form_valid()处理表单。此外,您不会将结果存储在一个共同的地方,以便两种方法获取它。尝试类似:form_valid()

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

def get_context_data(self, **kwargs):
    context = super(MainView, self).get_context_data(**kwargs)
    context['data'] = self.data
    return context
于 2012-10-09T10:19:26.960 回答