Тег {{self.article_title}} не отображал веб-приложения в трясогузке - PullRequest
0 голосов
/ 07 августа 2020

чего я хочу

Я создам одно веб-приложение с помощью wegtail, например приложение для распространения новостей. Я создал класс на Blocks.py, унаследовал его от models.py и закодировал html, чтобы их отображать. Этот класс означает ввод информации о статье, такой как название и URL-адрес, и их перечисление. хотя я закодировал html, и он был распознан, однако он не отображается на дисплее.

сообщения об ошибках

У меня нет сообщений об ошибках. Пожалуйста, посмотрите это фото, я закодировал {{self}} и ​​покажу их. Мы видим заголовок статьи и дополнительную информацию.

Подробно

Дерево проекта

это состав моего проекта. дерево проекта

кодировка

#streams/blocks.py
#python file

#block model to input article info
class ArticleIndexBlock(blocks.StructBlock):
    articles = blocks.ListBlock(
        blocks.StructBlock(
            [
                ("article_image", ImageChooserBlock(required=True)),
                ("article_title", blocks.CharBlock(required=True, max_length=40)),
                ("article_text", blocks.TextBlock(required=True, max_length=200)),
                ("article_url", blocks.URLBlock(required=False)),
            ]
        )
    )

    class Meta:
        template = "streams/article_index_block.html"
        icon = "edit"
        label = "Article"
#articles/models.py
#python file

#models inherited from Streams/blocks.py
class ArticleIndexPage(Page):
    template = "articles/article_index.html"

    content = StreamField(
        [
            ("article_index_block", blocks.ArticleIndexBlock()),
        ],
        null=True,
        blank=True,
    )

    content_panels = Page.content_panels + [
        StreamFieldPanel("content"),
    ]

    def get_context(self, request, *args, **kwargs):
        context = super().get_context(request, *args, **kwargs)
        context["posts"] = ArticleIndexPage.objects.live().public()
        return context

    class Meta:
        verbose_name = "Article index Page"
        verbose_name_plural = "Article index Pages"

<!--article_index.html-->

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

{% block content %}
    <h1>{{ self.title }}</h1>


    {% for block in page.content %}
        {% include_block block%}
    {% endfor %}

{% endblock content %}

<!--article_index_block.html-->

<div class="container">
  <h3>{{ self.article_title }}</h3>

</div>

</hr>

1 Ответ

1 голос
/ 07 августа 2020

Ваш ArticleIndexBlock не имеет свойства article_title. В соответствии с текущим определением он имеет единственное свойство articles, которое представляет собой список StructBlocks с различными свойствами, включая article_title

. Скорее всего, вам не нужны все эти вложенные блоки - StreamField уже является списком блоков, поэтому вам не нужно определять список внутри блока. Вместо этого просто определите свои поля непосредственно в классе:

class ArticleIndexBlock(blocks.StructBlock):
    article_image = ImageChooserBlock(required=True)
    article_title = blocks.CharBlock(required=True, max_length=40)
    article_text = blocks.TextBlock(required=True, max_length=200)
    article_url = blocks.URLBlock(required=False)

    class Meta:
        template = "streams/article_index_block.html"
        icon = "edit"
        label = "Article"

Тогда ваш шаблон будет работать.

Однако, если вы действительно хотели, чтобы ваш блок «Статья» содержал список статей ( так что страница в целом представляет собой список списков), вам нужно будет l oop поверх них в article_index_block. html.

<div class="container">
    {% for article in self.articles %}
        <h3>{{ article.article_title }}</h3>
    {% endfor %}
</div>
...