StreamBlock верхнего уровня в StreamField не отображается в шаблоне - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь использовать StreamBlock, как последний фрагмент в разделе документации здесь , в качестве единственного аргумента для StreamField. Он отлично работает в админке Wagtail, но при попытке рендеринга в шаблоне ничего не появляется. Я попытался использовать шаблон по умолчанию и просто включить_блок, но ничего не отображается. Я также попытался использовать пользовательский шаблон и include_block, и пользовательский шаблон был запущен, но я не смог отрисовать ничего полезного оттуда. Я вернулся к попытке использовать шаблон по умолчанию в следующем коде.

home / models.py:

from django.db import models

from wagtail.core.models import Page
from wagtail.core.fields import StreamField
from wagtail.admin.edit_handlers import StreamFieldPanel

from home.blocks import HeroImageStreamBlock


class HomePage(Page):
    hero_image = StreamField(HeroImageStreamBlock(
            block_counts={
                'hero_button': {'max_num': 1},
                'is_active': {'max_num': 1},
                'is_randomized': {'max_num': 1},
            }
        )
        , blank=True
    )

    content_panels = Page.content_panels + [
        StreamFieldPanel('hero_image'),
    ]

home / blocks.py:

from wagtail.core import blocks
from wagtail.images.blocks import ImageChooserBlock


class HeroButtonBlock(blocks.StructBlock):
    button_text = blocks.CharBlock(required=False)
    button_page = blocks.PageChooserBlock(required=False)
    button_url = blocks.URLBlock(required=False)
    is_active = blocks.BooleanBlock(required=False,
                                    help_text="""When checked, this hero button is active. 
                             NOTE: Only the first active hero button will be displayed.""")

    class Meta:
        icon = "link"


class HeroTextBlock(blocks.StructBlock):
    hero_text = blocks.CharBlock(required=False)
    is_active = blocks.BooleanBlock(required=False,
                                    help_text="""When checked, this hero text is active. 
                                 NOTE: Only the first active hero text will be displayed.""")

    class Meta:
        icon = "edit"


class HeroImageBlock(blocks.StructBlock):
    """This is the StructBlock for the hero images."""
    background_image = ImageChooserBlock()
    is_active = blocks.BooleanBlock(required=False,
                                    help_text="""When checked, this hero image is active.""")

    class Meta:
        icon = "image"


class HeroImagesListBlock(blocks.ListBlock):
    class Meta:
        icon = "media"


class HeroImageStreamBlock(blocks.StreamBlock):
    """This is the container StreamBlock for the hero image."""
    hero_images = HeroImagesListBlock(HeroImageBlock())
    text = HeroTextBlock()
    hero_button = HeroButtonBlock()
    is_randomized = blocks.BooleanBlock(required=False,
                                        label="Is Randomized?",
                                        help_text="When checked, images will load in random order.")
    is_active = blocks.BooleanBlock(required=False,
                                    help_text="""When checked, this hero image is active. 
                             NOTE: Only the first active hero image will be displayed.""")

home / templates / home / home_page. html:

{% extends "base.html" %}
{% load wagtailcore_tags %}

{% block content %}
    test
    {% include_block page.hero_image %}
{% endblock content %}

Я довольно плохо знаком с python / django / wagtail, так что надеюсь, что это просто / концептуальная ошибка. Любая помощь приветствуется. Заранее спасибо.

1 Ответ

0 голосов
/ 15 марта 2020

В моем случае это не работало, потому что блоки, созданные в админке, все еще находились в черновом состоянии, не были опубликованы (facepalm). После публикации это прекрасно работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...