在Django 1.5 TemplateView中访问post()之外的POST数据

时间:2013-11-02 17:55:03

标签: python django post

我是Django(1.5)的新手,我正在尝试做一个基本的POST表单。我有TemplateView来实现表单(使用get_context_data传递给模板。)

当表单由于某种原因(例如验证错误)失败时,我想再次显示表单,其中包含用户填写的数据。成功后,我想重定向到成功页面(例如刚刚创建的项目)。

这是我到目前为止所做的:

class WriteForm(forms.Form):
    subject = forms.CharField()
    text = forms.CharField(widget=forms.Textarea)
    # some other stuff

class WriteView(MailboxView):
    # MailboxView extends TemplateView and defines some context
    template_name = 'messages/write.html'
    form_data = None

    def post(self, request, *args, **kwargs):
        # treat form data...
        # lets make things simple and just assume the form fails
        # I want to do something like that:
        self.form_data = request.POST
        # should I return something?

    def get_context_data(self, **kwargs):
        context = super(WriteView, self).get_context_data(**kwargs)
        if self.form_data is None:
            context['form'] = WriteForm()
        else:
            context['form'] = WriteForm(self.form_data)
        return context

提前致谢!

1 个答案:

答案 0 :(得分:0)

Django已经拥有了你可以使用的FormView。如果你想看看它是如何工作的,这里是code on GitHub

如果你想编写自己的视图而不是使用内置的表单视图,你可能会发现查看Django Vanilla Views中的FormView很有用,它有一个更简单的实现。