Как отобразить содержимое страницы wagtail, особенно содержимое listblock

это мой файл модели, в котором я определяю карточки для администратора wagtail from wagtail.models import Page

from wagtail.fields import StreamField

from wagtail.admin.panels import FieldPanel

from strems import Blocks

class TestPage(Page):

«»«Страница для тестирования рендеринга блока карты.»«»"

template = «strems/test.html»

cards = StreamField(

)

[(«карты», Blocks.cardblocks())],

blank=True,

null=True,

)

content_panels = Page.content_panels + [

FieldPanel(«cards»),

]

class Meta:

verbose_name = «Test Page»

verbose_name_plural = «Тестовые страницы»

это мой block.py, в котором я указываю свой блок со списком в приложении strems

класс cardblocks(StructBlock):

title =CharBlock(required=True,help_text=«Add text here»)

cards=ListBlock(

)

StructBlock(

)

[

(«image», ImageChooserBlock(require=True)),

(«title»,CharBlock(required=True,max_length=23)),

(«text»,TextBlock(required=True,max_length=50)),

(«button_page»,PageChooserBlock(required=False)),

(«button_url»,URLBlock(required=False)),

],

)

)

template = «strems/card_block.html»

class Meta:

icon = «placeholder»

label = «blockcards»

ad также вот мой html-шаблон для вывода содержимого {% extends «base.html» %}

{% load wagtailcore_tags %}

{% load wagtailimages_tags%}

{% block content %}

<div class=«container»>

<div class=«container»>

<h1>{{ self.title }}</h1>

<div class=«row»>

{% for card in self.cards %}

<div class=«card col-md-4» style=«width: 18rem; margin: 10px;»>

{% if card.image %}

<img src=«{{ card.image.url }}» class=«card-img-top»>

{% endif %}

<div class=«card-body»>

<h5 class=«card-title»>{{ card.title }}</h5>

<p class=«card-text»>{{ card.text }}</p>

{% if card.button_page %}

<a href=«{{ card.button_page.url }}» class=«btn btn-primary»>Перейти к {{ card.button_page.title }}</a>

{% elif card.button_url %}

<a href=«{{ card.button_url }}» class=«btn btn-primary»>Visit Link</a>

{% endif %}

</div>

</div>

{% endfor %}

</div>

</div>

{% endblock %}

но моя проблема в том, что я не могу отобразить содержимое структурного блока в пользовательском представлении страницы мой вывод выглядит так enter image description here а я хочу чтобы было так enter image description here для того чтобы отображать карты и их содержимое

я пытаюсь изменить код шаблона, но ничего не происходит

Структура StreamField требует доступа к block.value при работе с пользовательскими блоками типа StructBlock. Вместо того чтобы напрямую переходить к self.cards, необходимо сначала выполнить итерацию по блокам, а затем получить доступ к содержимому блока List.

{% for block in self.cards %}
    {% if block.block_type == 'cards' %}
        {% for card in block.value.cards %}
            <div class="card col-md-4" style="width: 18rem; margin: 10px;">
                {% if card.image %}
                    <img src="{{ card.image.url }}" class="card-img-top">
                {% endif %}
                <div class="card-body">
                    <h5 class="card-title">{{ card.title }}</h5>
                    <p class="card-text">{{ card.text }}</p>
                    {% if card.button_page %}
                        <a href="{{ card.button_page.url }}" class="btn btn-primary">Go to {{ card.button_page.title }}</a>
                    {% elif card.button_url %}
                        <a href="{{ card.button_url }}" class="btn btn-primary">Visit Link</a>
                    {% endif %}
                </div>
            </div>
        {% endfor %}
    {% endif %}
{% endfor %}
Вернуться на верх