Как отобразить содержимое страницы 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 %}