jQuery SlideOut Box 中的 Wagtail 形式

Wagtail Form in jQuery SlideOut Box

我正在使用 Wagtail CMS 创建一个网站。我的客户想要在用户单击按钮时出现的 jQuery SlideOut 框中的表单。我不确定解决这个问题的最佳方法;我在联系页面上也有一个单独的联系表格,form_page.html 模板位于 /contact 文件夹中。我应该在哪里为要出现在站点每个页面上的 jQuery 框定义表单?当前的代码位于 /site_name/templates/includes.

内的 footer.html 模板文件中

有什么方法可以在 Wagtail 中执行此操作,还是我应该考虑使用单独的 Django 表单来执行此操作?

编辑:看来我可以使用代码段。这是要走的路吗?

如有任何帮助,我们将不胜感激。提前致谢。

片段不太可能在这里提供帮助,因为 wagtailforms 模块是围绕表单作为页面存在于页面树中某处特定 URL 的想法设计的。即使表单本身并不特别存在于任何一页上,也必须有一个定义明确的 URL 表单才能 post 到 - 片段没有 URLs.

如果您不需要在 Wagtail 管理中定义表单字段的能力,一个普通的 Django 表单(post连接到一个普通的 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 属性,以便它 post 进入您设置的表单页面。)