Django - TemplateView和POST

时间:2017-07-01 09:59:45

标签: django

我有一个由TemplateView生成并包含POST表单的页面。 如何将此表单与TemplateView一起使用。

有一个类似我的代码的例子:

class ProjetMixin(object) :

    ...

    def get_context_data(self, **kwargs) :
        ...
        return context


class AView(ProjetMixin, TemplateView):
    template_name = 'path-to-the-page.html'

    offre = None

    def get_context_data(self, **kwargs) :

        context = super(AView, self).get_context_data(**kwargs)

        try :   
            self.offre = self.projet.offredeprojet
        except OffreDeProjet.DoesNotExist :
            self.offre = None   

        if self.request.user.is_authenticated() :               
                print(" method = ",self.request.method) //display "GET"
                if self.request.method == "POST" :
                    print("post")

        context['offre'] = self.offre

        return context

所以唯一的方法是GET,但我怎样才能使用POST?

提交表单时出现此错误:

Method Not Allowed (POST): /projets/pseudoaz/recrutement
[2017/07/01 11:50:57] HTTP POST /projets/pseudoaz/recrutement 405 [0.06, 127.0.0.1:57560]

谢谢

2 个答案:

答案 0 :(得分:5)

对于generic.TemplateView,您只实施了get方法。您应该实施post方法以允许发布表单或尝试使用generic.FormView

文档中的更多详细信息:https://docs.djangoproject.com/en/1.11/topics/class-based-views/generic-editing/

答案 1 :(得分:0)

Django 早已更新以支持其视图的扩展。 以下代码说明了如何通过 post 方法使用 django 的通用 Templateview。或者,根据逻辑的复杂程度,可以使用 View、Formview 或基于函数的视图,这只是表达具有后期实现的 TemplateView。

WHERE 
    1 = 1
    (CASE WHEN @Datecategory = 'Beginn' THEN [Beginn] ELSE '' END) BETWEEN (@start) AND (@end)