【问题标题】:Whne Using django forms in wagtail Page, how to handle request.method == 'POST'?在 wagtail 页面中使用 django 表单时,如何处理 request.method == 'POST'?
【发布时间】:2018-05-12 17:04:34
【问题描述】:

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

我正在 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

表单在页面中呈现,我正在使用清晰的表单和 re_captcha,但是在提交表单时我无法处理请求。

  1. 是否需要新视图来处理请求?
  2. 我是否使用 serve 方法?
  3. 使用 AJAX 提交表单?

如果我想将表单放在单独的页面上,我正在使用 serve 方法,它一切正常,但 serve 会覆盖所有内容,我不能使用我的主页模板。

【问题讨论】:

    标签: python-3.x django-forms wagtail


    【解决方案1】:

    您应该覆盖页面的serve 方法。这是 Wagtail 中与 Django 的视图函数最接近的等价物,因为它允许您根据表单处理的结果返回您喜欢的任何 HTTP 响应 - 渲染模板(最容易使用 Django 的 django.shortcuts.render 助手)或其他东西,例如重定向。

    有关将 Django 表单实现为 ​​Wagtail 页面的工作示例,请参阅 wagtail-form-example

    【讨论】:

      【解决方案2】:

      来自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,
              })
      

      【讨论】:

        猜你喜欢
        • 2018-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多