Wagtail FormBuilder - 如何在着陆模板中使用表单数据?

时间:2017-01-28 03:16:28

标签: python formbuilder wagtail

我使用Wagtail提供的表单构建器模块在Wagtail Admin中创建一个简单的联系人表单。表单包含动态添加的字段名称电子邮件主题消息;模型ContactPage继承自AbstractForm

问题:

我想在名称字段中使用输入的名称来个性化对使用联系表单的用户的响应消息。 Wagtail的“阅读”“表单”构建器上的“文档”页面仅指出form form_page.html 模板的上下文的一部分,而 form_page_landing.html 模板是标准模板。是否可以通过开箱即用的登陆模板的上下文以某种方式访问​​表单提交的值?如果没有,是否有人可以举例说明如何/什么页面功能要覆盖,以便将我需要的信息添加到上下文中?谢谢!

1 个答案:

答案 0 :(得分:1)

Wagtail通过AbstractFormWsSecurity)及其serve方法为其表单页面提供服务。此方法检查HTTP方法是否为“POST”,以便它处理表单并返回登录页面或呈现实际表单。您可以将此方法覆盖到自定义表单类,以便更新登录页面的上下文,如下所示:

   def serve(self, request, *args, **kwargs):
        if request.method == 'POST':
            form = self.get_form(request.POST, page=self, user=request.user)

            if form.is_valid():
                self.process_form_submission(form)

                # Update the original landing page context with other data
                landing_page_context = self.get_context(request)
                landing_page_context['name'] = form.cleaned_data['name']

                return render(
                    request,
                    self.get_landing_page_template(request),
                    landing_page_context
                )
        else:
            form = self.get_form(page=self, user=request.user)

        context = self.get_context(request)
        context['form'] = form
        return render(
            request,
            self.get_template(request),
            context
        )

现在,着陆页上下文将包含name上下文变量,其中包含名称表单字段的值!