【问题标题】:Wagtail Form in jQuery SlideOut BoxjQuery SlideOut 框中的 Wagtail 表单
【发布时间】:2016-10-19 14:56:16
【问题描述】:

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

有没有办法在 Wagtail 中做到这一点,或者我应该考虑使用单独的 Django 表单来做到这一点?

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

任何帮助将不胜感激。提前致谢。

【问题讨论】:

    标签: jquery forms wagtail


    【解决方案1】:

    在这里,sn-p 不太可能有帮助,因为wagtailforms 模块是围绕表单作为页面存在于页面树中某处的特定 URL 的想法而设计的。即使表单本身不存在于任何特定页面上,也必须有一个明确定义的 URL 才能将表单发布到 - 而 sn-ps 没有 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 某处 em>)。那么,包含标签代码就变成了:

    @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 属性,以便它发布到您设置的表单页面。)

    【讨论】:

    • 这行得通,但由于某种原因我的表单没有加载。模板的其余部分有效,但中间没有表格。我将为此发布一个单独的问题。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多