首页 > 解决方案 > 在 wagtail 中,Streamforms 不会呈现表单的内容

问题描述

我已经安装了 wagtail Streamforms 包最新版本和 wagtail 2.0 ,但是当我使用它创建表单并且表单内容未使用默认表单模板显示并且当我定义自定义模板“streamforms/form_block.html”时仍然是它没有显示的表单。我已经定义了我在我的base.py文件中使用的模板,如文档中所述。

WAGTAILSTREAMFORMS_FORM_TEMPLATES = ( ('streamforms/form_block.html', '默认表单模板'), )

但是在我创建表单时在管理面板-> Streamforms 中,在模板选择器字段中它只显示“默认表单模板”

我已经在流域的models.py中定义了它,并为自己定义了模板来显示它不呈现的内容仍然是类StandardPage(Page):

class StandardPage(Page):
    introduction = models.TextField(
        help_text='Text to describe the page',
        blank=True)
    image = models.ForeignKey(
        'wagtailimages.Image',
        null=True,
        blank=True,
        on_delete=models.SET_NULL,
        related_name='+',
        help_text='Landscape mode only; horizontal width between 1000px and 3000px.'
    )
    video_url = models.URLField(
        null=True,
        blank=True
    )
    body = StreamField([
        (
            'main_content',
            blocks.ListBlock(BaseStreamBlock(), label='content')
        ),
        (
            'form',
            blocks.ListBlock(WagtailFormBlock(), label='create form')
        )
    ,],
        blank=True,
        null=True,
        verbose_name="Standard Page"
    )

    content_panels = Page.content_panels + [
        FieldPanel('introduction', classname="full"),
        ImageChooserPanel('image'),
        FieldPanel('video_url'),
        StreamFieldPanel('body'),
    ]

    @property
    def standard_page(self):
        return self.get_parent().specific

这是我的“Standard_Page.html”模板

    {% extends "base.html" %}
{% load wagtailcore_tags wagtailtrans_tags streamforms_tags wagtailimages_tags homeapp_tags%}



 {% block content%}


{% include "base/include/header.html" %}
    <div class="container">
{{ page.introduction }}
     {{ page.image }}

        <div class="row">
            <div class="col-md-7">
               {% for block in page.body %}
                {{ block}}
{% endfor %}
            </div>

        </div>
        </div>
{% endblock  %}

我做错了什么?

标签: wagtailwagtail-streamfield

解决方案


假设您在上面放置的是您的实际设置:

WAGTAILSTREAMFORMS_FORM_TEMPLATES = (
    ('streamforms/form_block.html', 'Default Form Template'),
)

这仅用于填充表单中可用模板的下拉列表。您所设置的正是设置中的默认设置。如果您想覆盖包中的默认模板,您只需要确保位于streamforms/form_block.html您自己代码路径上的模板位于您的INSTALLED_APPS. Django 将首先看到您的模板并进行渲染。

如果你想为默认提供一个额外的模板,只需设置:

WAGTAILSTREAMFORMS_FORM_TEMPLATES = (
    ('streamforms/form_block.html', 'Default Form Template'),
    ('example/forms/another_form_block.html', 'My Custom Template'),
)

只需创建一个模板“example/forms/another_form_block.html”,就像http://wagtailstreamforms.readthedocs.io/en/latest/templates.html#templates中的示例一样。然后,您将有两种模板可供选择。包装内的那个和你自己的。

希望这可以帮助。


推荐阅读