我在流字段中添加了 4 个段落块。循环遍历段落块时,它会在单独的标签中显示所有 4 个段落
。我怎么能只限制在第一段块? 我尝试使用此解决方案:
{% if forloop.counter0 == 0 %}
<p>{{block.value}}</p>
{% endif %}
但问题是,只有当段落字段按第一顺序放置时,它才有可能。例如,在第一段之前可以有 3 张图像,这使得可能的解决方案无效。
博客/模型.py
class BlogPage(Page):
body = StreamField([
('paragraph', blocks.RichTextBlock()),
('image', ImageChooserBlock()),
])
content_panels = Page.content_panels + [
StreamFieldPanel('body')
]
blog_page.html
{% for block in page.body %}
{% if block.block_type == 'paragraph' %}
<p>{{block.value.0}}</p> <!-- Another attempt at trying to get single paragraph -->
{% endfor %}
在模型内部的 Python 代码中执行这种逻辑通常比尝试将其硬塞到 Django 模板符号中更容易:
class BlogPage(Page):
body = StreamField([
('paragraph', blocks.RichTextBlock()),
('image', ImageChooserBlock()),
])
content_panels = Page.content_panels + [
StreamFieldPanel('body')
]
def first_paragraph(self):
for block in self.body:
if block.block_type == 'paragraph':
return block.value
然后在模板中使用<p>{{page.first_paragraph}}</p>
。