Wagtail / Django ListBlock 行为

问题描述 投票:0回答:1

我在使用 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。给定示例的输出产生有线重复输出...

我错过/监督了什么?

python django templates wagtail
1个回答
3
投票

这是因为您循环了两次。删除第二个 for 循环:

{% for x in block.value %}
value
应该可以在没有额外循环的情况下访问。您可以使用
value.image
而不是
x.image

在模板中获取图像
© www.soinside.com 2019 - 2024. All rights reserved.