每个Wagtail页面上的Django表单,例如base.html页脚中的联系表

时间:2019-05-17 15:05:09

标签: django django-forms wagtail

我想在基于wagtail cms框架的多页网站的页脚中使用django-forms实现联系表。如何在每个页面的base.html模板中呈现表单?谢谢!

3 个答案:

答案 0 :(得分:2)

我建议将其实现为inclusion template tag

@register.inclusion_tag('contact_form.html')
def contact_form():
    return {'form': ContactForm()}

contact_form.html模板将包含表单的HTML。然后,您可以使用标签{% contact_form %}

将其包含在base.html中。

答案 1 :(得分:1)

尽管您希望联系表单出现在每个页面上,但我仍然会制作一个专用的ContactFormPage并将表单放置在每个页脚中。 POST请求应指向此专用的ContactFormPage。

<form action='{% pageurl contact_page' %}' ...>

优点是:

  • 联系表中包含错误时,您位于专用页面上 专注于手头的任务。
  • 发生错误时无需滚动回页脚。
  • 易于通过RoutablePageMixin添加成功页面
  • 可共享的联系表单网址

可以通过以下方式包含html表单:

  • 包含模板标签(Gasmans答案)
  • 中间件(shouravs答案)

答案 2 :(得分:0)

middleware.py所在的根文件夹中创建一个settings.py。然后将其添加到该文件中

class SimpleMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
        # One-time configuration and initialization.

    def __call__(self, request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.
        request.contact_form = ContactForm()
        response = self.get_response(request)

        # Code to be executed for each request/response after
        # the view is called.

        return response