无法访问模板中Streamfield中的嵌套块的值

约翰尼

我是Wagtail的新手,但是我已经完成作业并阅读了文档,并在网上搜索了其他参考文献,但无法弄清楚为什么我无法成功遍历并渲染输入到Steamfield内部各种块中的值。我已经在主页模板中以及该块的模板中进行了尝试。

这是我的模型(议程注释模板现在已注释掉):

class AgendaPage(Page):
author= models.CharField(max_length=255)
date = models.DateField('Post date')
agenda = StreamField([
    ('agenda_item', blocks.StreamBlock([
        ('item_title', blocks.TextBlock()),
        ('item_content', blocks.ListBlock(blocks.StructBlock([
            ('item_text', blocks.TextBlock()),
            ('mtg_doc', blocks.StructBlock([
                ('doc_description', blocks.TextBlock()),
                ('doc_link', blocks.TextBlock())
            ]))
        ])))

    ]
    #,
    #template='blocks/agenda_temp.html',
    ))
])




content_panels = Page.content_panels + [
    FieldPanel('author'),
    FieldPanel('date'),
    StreamFieldPanel('agenda'),

]

当我拥有最基本的模板时,将呈现在编辑器中发布页面时输入的所有值,但其名称位于其前面。因此,在此基本模板中:

{% for block in self.agenda %}
     {{ block.value }}
{% endfor %} 

如果我尝试分别访问其中的值,那么我什么也没得到。以下仅是示例,但我尝试了许多其他语法组合,包括对名为“ agenda_item”的块使用单独的模板无济于事:

{% if block.block_type == 'item_title' %}

           <h2>{{ block.value }}<h2>

      {% endif %}

即使我的Streamfield嵌套确实保存到数据库并使用简单的{{block}}标签呈现,也可能有问题吗?

更新:我接受了这个答案,因为它解决了我的模板渲染问题,但是也许此屏幕快照将有助于说明我现有的问题。通过单击编辑器界面中的+,可以使用streamblock'agenda_item'将其他子块添加到'agenda_item'以及添加一个新的'agenda_item',这非常好,几乎完全满足我的需要。问题是我只希望为新的“ agenda_item”提供“ item_title”,而不为“ agenda_item”中的孩子提供。这就是为什么我本来就这样嵌套流域子级,但是后来却无法访问模板渲染中最低级别的嵌套块的原因。因此,缩减流域的级别可以解决此问题,但现在用户可能会在不必要或无效的地方错误地添加了item_title。我的问题是:

有效的XHTML
(来源:pocketsofactivity.com

我现有的模型和面板定义如下所示:

agenda = StreamField([
    ('agenda_item', blocks.StreamBlock([
        ('item_title', blocks.TextBlock()),
        ('item_text', blocks.TextBlock()),
        ('mtg_doc', blocks.StructBlock([
            ('mtg_doc_upload', DocumentChooserBlock(required=True)),
            ('submitted_late', blocks.BooleanBlock(required=False, help_text='Submitted Late')),
            ('heldover', blocks.BooleanBlock(required=False, help_text='Held Over')),
            ('heldover_from', blocks.DateBlock(required=False, help_text="Held Over From")),
        ])),
        ('item_audio', DocumentChooserBlock(required=False)),
    ]))
])




content_panels = Page.content_panels + [
    FieldPanel('author'),
    FieldPanel('date'),
    FieldPanel('mtg_date'),
    FieldPanel('mtg_time'),
    StreamFieldPanel('mtg_media'),
    StreamFieldPanel('agenda'),

]
加斯曼

按照当前编写代码的方式,顶级块始终为type agenda_item,因此在遍历它们时需要考虑到这一点:

{% for block in self.agenda %}
    {% if block.block_type == 'agenda_item' %} {# will always be true, but included here for clarity #}
        {% for subblock in block.value %}
            {% if subblock.block_type == 'item_title' %}
                <h2>{{ subblock.value }}</h2>
            {% elif subblock.block_type == 'item_content' %}
                rendering for item_content...
            {% endif %}
        {% endfor %}
    {% endif %}
{% endfor %}

但是,我认为您根本不需要真正的agenda_itemStreamBlock-它只是添加了不必要的间接级别,这使您不胜其烦。据我所知,您可以通过在顶层创建item_titleitem_content两种可用的块类型来获得相同的结果

agenda = StreamField([
    ('item_title', blocks.TextBlock()),
    ('item_content', blocks.ListBlock(blocks.StructBlock([
        ('item_text', blocks.TextBlock()),
        ('mtg_doc', blocks.StructBlock([
            ('doc_description', blocks.TextBlock()),
            ('doc_link', blocks.TextBlock())
        ]))
    ])))
])

(或者您是否打算agenda_item成为StructBlock ...?)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法访问模板中Streamfield中的嵌套块的值

来自分类Dev

Django:无法访问模板中字典的值

来自分类Dev

无法访问模板中的foreignKey

来自分类Dev

无法访问模板中的范围数据

来自分类Dev

无法访问嵌套函数中的“ this”

来自分类Dev

嵌套模板中无法访问聚合物自定义元素属性

来自分类Dev

无法访问嵌套字典中的值以在网络中添加链接

来自分类Dev

无法访问JS对象中的值

来自分类Dev

无法访问结构数组中的值

来自分类Dev

无法访问JS对象中的值

来自分类Dev

无法访问$ modalInstance中的表单值

来自分类Dev

无法访问JSON对象中的值

来自分类Dev

在JavaScript中无法访问数组的值

来自分类Dev

无法访问表属性中的值

来自分类Dev

无法访问Controller中的$ data值

来自分类Dev

UWP - 无法访问 ItemsPanel 中的值

来自分类Dev

python无法访问列表中的值

来自分类Dev

无法访问对象中的值

来自分类Dev

无法访问nodejs中的数组值

来自分类Dev

使用html templater无法访问的代码块(在python中)

来自分类Dev

无法访问的脚本块中引发了“无效的列名”

来自分类Dev

在模板中以字符串形式呈现的Django列表-无法访问列表值

来自分类Dev

无法访问树枝模板 symfony 4 中的布尔值

来自分类Dev

在Netezza中的嵌套查询中无法访问外部表

来自分类Dev

无法访问模板基类中的变量

来自分类Dev

无法访问模板函数中的迭代器

来自分类Dev

Ngx-Datatable无法访问模板中的行

来自分类Dev

无法访问html模板中的this.text

来自分类Dev

无法访问Django模板中的媒体文件