我正在创建一个使用Wagtail CMS的网站。我的客户端希望在用户单击按钮时出现在jQuery SlideOut Box中的表单。我不确定这样做的最佳方法;我在Contact页面上也有一个单独的联系人表单,form_page.html模板位于/contact文件夹中。我将在哪里定义jQuery框的表单,该框将出现在站点的每一页上?该代码当前驻留在footer.html模板文件中的/site_name/templates/includes中。
在Wagtail中有什么方法可以做到这一点,还是应该使用一个单独的Django表单来完成呢?
编辑:看起来我可能需要一个片段。这是该走的路吗?
任何帮助都将不胜感激。提前谢谢。
发布于 2016-10-19 19:37:52
这里不太可能有代码片段的帮助,因为wagtailforms模块是围绕页面树中某个特定URL中的某个页面存在的表单的概念而设计的。即使表单本身不存在于任何特定的页面上,也必须有一个定义良好的URL才能将表单发布到--并且代码段没有URL。
如果您不需要在Wagtail admin中定义表单字段,那么普通Django表单(投递到普通Django视图)是最简单的路径。为了使表单对象在每个页面上都可用,我建议在myapp/templatetag/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设置一个表单页面--它可能是用户期望访问的一个实际页面,也可能不是一个页面(但它确实需要发布并在某个地方存在)。然后,包含标记代码变成:
@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属性,以便将其发布到您设置的表单页面。)
https://stackoverflow.com/questions/40134978
复制相似问题