如何从Wagtail CMS的streamfield中检索页面内容?

2024-04-27 13:57:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经创建了SolutionPage,在它的content字段中有一个嵌套的short_portfolio块。我已经通过Wagtail管理面板向PageChooserBlock添加了几个ProjectPage实例。在

class SolutionPage(Page):
    ... 
    content = StreamField([
        ...
        ...
        ('short_portfolio', blocks.StructBlock([
            ('title', blocks.CharBlock(required=False)),
            ('description', blocks.RichTextBlock(required=True)),
            ('projects', blocks.StreamBlock([
                ('project', blocks.PageChooserBlock(ProjectPage)),
            ], required=False, max_num=4)),
        ])),
    ], blank=True, null=True, validators=[UniqueProjectsInShortPortfolioValidator()])   

现在,我正在为PDF导出工作API视图,我需要从给定的SolutionPage中提取所有ProjectPage对象

^{pr2}$

问题是,用这种方法我只能提取页面的“模式”之类的内容,而不能提取它的实际内容。在

TypeError at /solutions/ai-driven-machine-learning-software/portfolio-pdf/
'StreamBlock' object is not iterable

Debug variables


Tags: 实例falsetrue面板内容requiredcontentwagtail
1条回答
网友
1楼 · 发布于 2024-04-27 13:57:26

solution_page.content.stream_block.child_blocks["short_portfolio"]将给出short_portfolio块的定义,而不是该块的特定实例。为此,您需要遍历字段内容,寻找与block_type匹配的块:

projects = []
for block in solution_page.content:
    if block.block_type == 'short_portfolio':
        for project_block in block.value['projects']:
            projects.append(project_block.value)

相关问题 更多 >