Python 3.x 在wagtail页面中使用django表单时,如何处理request.method==';邮政';?

Python 3.x 在wagtail页面中使用django表单时,如何处理request.method==';邮政';?,python-3.x,django-forms,wagtail,Python 3.x,Django Forms,Wagtail,当用户提交表单时,我无法处理请求 我正在HomePage类中的get_context()方法中呈现我的表单: def get_context(self, request): context = super(HomePage, self).get_context(request) from .forms import RosaleaContactForm if request.method == 'POST': form = RosaleaContactF

当用户提交表单时,我无法处理请求

我正在HomePage类中的get_context()方法中呈现我的表单:

def get_context(self, request):
    context = super(HomePage, self).get_context(request)

    from .forms import RosaleaContactForm
    if request.method == 'POST':
        form = RosaleaContactForm(request.POST)
        if form.is_valid():
            subject = request.POST['subject']
            name = request.POST['from_name']
            message = request.POST['message']
            to_email = request.POST['from_email']
            from_phone = request.POST['from_phone']

            send_mail(
                subject,
                name,
                message,
                from_email,
                [to_email],
                fail_silently=False,
            )

            form = form
    else:
        form = RosaleaContactForm()

    context['form'] = form
    return context
表单在页面中呈现,我使用的是crispy表单和re_captcha,但在提交表单时我无法处理请求

  • 我是否需要一个新视图来处理请求
  • 我用发球法吗
  • 用AJAX提交表单

  • 如果我想将表单放在单独的页面上,我使用的是serve方法,但serve会覆盖所有内容,我无法使用我的主页模板。

    您应该覆盖页面的
    serve
    方法。这是Wagtail中与Django的视图函数最接近的等效函数,因为它允许您根据表单处理的结果返回任何您喜欢的HTTP响应——要么呈现模板(最容易使用Django的
    Django.shortcuts.render
    helper),要么重定向

    有关将Django表单实现为Wagtail页面的工作示例,请参见。

    来自gasman的回答: 它起作用了

    def serve(self, request):
            from flavours.forms import FlavourSuggestionForm
    
            if request.method == 'POST':
                form = FlavourSuggestionForm(request.POST)
                if form.is_valid():
                    flavour = form.save()
                    return render(request, 'flavours/thankyou.html', {
                        'page': self,
                        'flavour': flavour,
                    })
            else:
                form = FlavourSuggestionForm()
    
            return render(request, 'flavours/suggest.html', {
                'page': self,
                'form': form,
            })