我在使用 Wagtail 时面临着一个奇怪的情况。
我的模特:
class SlideBlock(blocks.StructBlock):
image = ImageChooserBlock()
caption = blocks.CharBlock(required=False)
class Meta:
template = 'home/blocks/carousel.html'
class HomePageIndex(Page):
body = StreamField([
('head', blocks.TextBlock(classname="full title")),
('text', blocks.RichTextBlock()),
('html', blocks.RawHTMLBlock()),
('slider', blocks.ListBlock(SlideBlock()))
], blank=True)
content_panels = Page.content_panels + [
StreamFieldPanel('body'),
]
# parent_page_types = []
subpage_types = ['home.HomePageIndex',
'blog.BlogPageIndex',
'blog.BlogTagPageIndex']
我的模板(主):
{% with blocks=self.body %}
{% for block in blocks %}
<section>
{% elif block.block_type == 'slider' %}
in
<!-- Gate to an nested template -->
{% include_block block %}
out
{% else %}
block-type not supported
{% endif %}
</section>
{% endfor %}
</article>
{% endwith %}
我的模板(嵌套):
<div>
<div>
{% for x in block.value %}
<div class="carousel-item">
{% image x.image max-1920x1080 class="d-block w-100" alt="Slide" %}
</div>
{% endfor %}
</div>
</div>
在我的数据库中,出于测试原因,我使用了一些测试数据...但由于某些奇怪的原因,调用了嵌套模板,因为我的数据库中有很多数据。所以我无法正确迭代 ListBlock。给定示例的输出产生有线重复输出...
我错过/监督了什么?
这是因为您循环了两次。删除第二个 for 循环:
{% for x in block.value %}
。 value
应该可以在没有额外循环的情况下访问。您可以使用 value.image
而不是 x.image
在模板中获取图像