【问题标题】:Embedding a Form Builder page in another Wagtail page在另一个 Wagtail 页面中嵌入 Form Builder 页面
【发布时间】:2019-04-04 02:13:31
【问题描述】:

Wagtail Form Builder 文档指出:

form_page.html 与标准 Wagtail 模板的不同之处在于它是 传递了一个变量form,其中包含一个Django Form对象,另外 到通常的page 变量。

但在我当前的项目中,我需要在另一个页面中嵌入一个联系表单(实现为表单生成器页面)。在该目标页面的模型中,我使用 PageChooserPanel 让编辑器选择要嵌入的表单页面。换句话说:

class TargetPage(Page):
    [...snip...]  
    contact_form = models.ForeignKey(
        'wagtailcore.Page',
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+',
    )

    content_panels = Page.content_panels + [
        [...snip...]
        PageChooserPanel('contact_form', 'FormPage'),
    ]

我的问题出在目标页面的模板中。我可以通过page.contact_form 访问表单页面的属性,但是由于此页面没有传入form 对象,我无法弄清楚如何呈现我的字段。

我猜我需要覆盖目标页面的 get_context() 以便它包含我需要的 form 对象。但我不知道如何获得该对象。有什么好心人能让我走上正轨吗?

【问题讨论】:

    标签: python django wagtail


    【解决方案1】:

    睡了一夜之后,答案竟然是比较明显的。缺少的链接是 Wagtail FormPage 的 get_form() 方法。我现在在我的 TargetPage 模型中使用它:

    def attached_form(self):
        return self.contact_form.specific.get_form()
    

    因此,在我的模板中,我可以参考 attach_form 来获取我的字段。

    【讨论】:

    • 你能告诉我你把这个方法放在哪里吗?
    • 这在models.py中,在你包含FormPage的页面的类中。
    猜你喜欢
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 2013-11-30
    相关资源
    最近更新 更多