我正在使用Wagtail CMS创建一个网站。我的客户想要在用户单击按钮时出现的jQuery SlideOut Box中的表单。我不确定最好的方法;我也在联系人页面上有一个单独的联系表单,form_page.html
模板位于/contact
文件夹中。我将在哪里定义要在网站的每个页面上显示的jQuery框的表单?目前的代码位于footer.html
内的/site_name/templates/includes
模板文件中。
有没有办法在Wagtail中做到这一点,或者我应该考虑使用单独的Django表单来做这件事?
编辑:看起来我可能会使用一个代码段。这是要走的路吗?任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:1)
这里的代码片段不太可能会有所帮助,因为wagtailforms
模块是围绕在页面树中的某个页面的特定URL处存在的表单的想法而设计的。即使表单本身并不特别存在于任何一个页面上,也必须有一个明确定义的URL才能将表单发布到 - 并且片段中没有URL。
如果你不需要能够在Wagtail管理员中定义表单字段,那么普通的Django表单(发布到普通的Django视图)是最简单的路由。要在每个页面上提供该表单对象,我建议定义自定义inclusion tag - 在myapp / templatetags / myapp_tags.py中,具有以下内容:
from django import template
register = template.Library()
@register.inclusion_tag('myapp/tags/contact_form.html')
def contact_form():
form = ContactForm()
return {'form': form}
然后,在您的模板中,{% load myapp_tags %}
和{% contact_form %}
。
如果您希望在Wagtail管理员中配置表单,可以使用上述方法和wagtailforms
模块的组合,利用表单页面模型提供的get_form
方法。首先,在您网站的某个位置使用wagtailforms
设置表单页面 - 它可能是也可能不是用户预期访问的实际页面(但它确实需要发布并存在于某处的URL )。然后,包含标记代码变为:
@register.inclusion_tag('myapp/tags/contact_form.html')
def contact_form():
form_page = ContactFormPage.objects.get(slug='contact-us')
form = form_page.get_form()
return {'form_page': form_page, 'form': form}
(在contact_form.html中,您可以使用{% pageurl form_page %}
作为表单的action
属性,以便将其发布到您已设置的表单页面。)