Python 通过Wagtail Streamfield项循环
我正在尝试创建一个索引页,其中包含指向Wagtail中多个照片库的链接。GalleryIndexPage模型如下所示:Python 通过Wagtail Streamfield项循环,python,django,templates,wagtail,wagtail-streamfield,Python,Django,Templates,Wagtail,Wagtail Streamfield,我正在尝试创建一个索引页,其中包含指向Wagtail中多个照片库的链接。GalleryIndexPage模型如下所示: class GalleryIndexPage(Page): subpage_types = ['home.GalleryPage'] gallery_thumb = StreamField ([ ('cover_photo', ImageChooserBlock()), ('title', blocks.CharBlock()),
class GalleryIndexPage(Page):
subpage_types = ['home.GalleryPage']
gallery_thumb = StreamField ([
('cover_photo', ImageChooserBlock()),
('title', blocks.CharBlock()),
('link', URLBlock()),
])
content_panels = Page.content_panels + [
StreamFieldPanel('gallery_thumb'),
]
('gallery_item', blocks.StructBlock([
('title', blocks.CharBlock()),
('link', blocks.URLBlock()),
('image', ImageChooserBlock()),
], icon='xyz'))
我很难在每套数据周围使用“gallery item”类将其渲染到模板中。我意识到它目前正在循环并向Streamfield内的每个块添加一类“gallery item”,而不是围绕整个Streamfield集合。以下是我的模板代码:
<div class="photo-gallery">
{% for block in self.gallery_thumb %}
<div class="gallery-item">
{% if block.block_type == 'cover_photo' %}
<div class="thumb">
{% image block.value fill-200x150 %}
</div>
{% endif %}
{% if block.block_type == 'title' %}
<div class="title">
<p>{{ block.value }}</p>
</div>
{% endif %}
{% if block.block_type == 'link' %}
<div class="link">
<a href="{{ block.value }}">View Gallery</a>
</div>
{% endif %}
</div>
{% endfor %}
我不确定如何在我的模板中访问这些值?以下是我到目前为止的情况:
<div class="photo-gallery">
{% for block in self.gallery %}
<div class="gallery-item">
<div class="thumb">
{% image self.cover_photo width-200 %}
</div>
<div class="title">
<p>{{ self.title }}</p>
</div>
<div class="link">
<a href="{{ self.link }}">>> View Gallery</a>
</div>
</div>
{% endfor %}
</div>
{self.gallery%中的块的%s}
{%image self.cover_照片宽度-200%}
{{self.title}
{%endfor%}
看起来您想要的是一个由图像、标题和链接组成的单一图库项目块。可以通过从更简单的块类型中创建自己的块类型来实现这一点。看
你可以这样做:
class GalleryIndexPage(Page):
subpage_types = ['home.GalleryPage']
gallery_thumb = StreamField ([
('cover_photo', ImageChooserBlock()),
('title', blocks.CharBlock()),
('link', URLBlock()),
])
content_panels = Page.content_panels + [
StreamFieldPanel('gallery_thumb'),
]
('gallery_item', blocks.StructBlock([
('title', blocks.CharBlock()),
('link', blocks.URLBlock()),
('image', ImageChooserBlock()),
], icon='xyz'))
您还可以将其创建为Python类,这是我通常喜欢做的,我在上面链接的部分的最后一部分介绍了这一点
您可以为此块创建自己的模板
在模板中,每个块都有两个属性,value
和block\u type
。例如,您可以使用{{self.title.value}
访问标题
请参见您想要的似乎是一个由图像、标题和链接组成的单一图库项目块。可以通过从更简单的块类型中创建自己的块类型来实现这一点。看
你可以这样做:
class GalleryIndexPage(Page):
subpage_types = ['home.GalleryPage']
gallery_thumb = StreamField ([
('cover_photo', ImageChooserBlock()),
('title', blocks.CharBlock()),
('link', URLBlock()),
])
content_panels = Page.content_panels + [
StreamFieldPanel('gallery_thumb'),
]
('gallery_item', blocks.StructBlock([
('title', blocks.CharBlock()),
('link', blocks.URLBlock()),
('image', ImageChooserBlock()),
], icon='xyz'))
您还可以将其创建为Python类,这是我通常喜欢做的,我在上面链接的部分的最后一部分介绍了这一点
您可以为此块创建自己的模板
在模板中,每个块都有两个属性,value
和block\u type
。例如,您可以使用{{self.title.value}
访问标题
请参见我可以使用以下代码访问模板中StructBlock的值:
<div class="photo-gallery">
{% for block in self.gallery %}
<div class="gallery-item">
<div class="thumb">
{% image block.value.cover_photo fill-200x150 %}
</div>
<div class="title">
<p>{{ block.value.title }}</p>
</div>
<div class="link">
<a href="{{ block.value.link }}">>>View Gallery</a>
</div>
</div>
{% endfor %}
{self.gallery%中的块的%s}
{%image block.value.cover_照片填充-200x150%}
{{block.value.title}
{%endfor%}
非常感谢你的帮助 我可以使用以下代码访问模板中StructBlock的值:
<div class="photo-gallery">
{% for block in self.gallery %}
<div class="gallery-item">
<div class="thumb">
{% image block.value.cover_photo fill-200x150 %}
</div>
<div class="title">
<p>{{ block.value.title }}</p>
</div>
<div class="link">
<a href="{{ block.value.link }}">>>View Gallery</a>
</div>
</div>
{% endfor %}
{self.gallery%中的块的%s}
{%image block.value.cover_照片填充-200x150%}
{{block.value.title}
{%endfor%}
非常感谢你的帮助 我已经使用了你上面的建议,这在管理中似乎非常有效,但是我在访问模板中的这些值时遇到了问题。上面更新的问题显示了我的尝试。谢谢添加了更多信息,我没有测试,但我很确定您只是缺少了.value
属性,如果它不适合您,请告诉我。是的,我只是缺少了.value
属性。再次感谢您的帮助。是否有办法限制为仅12个最新图像?@kbdev在模板中,您可能可以使用内置过滤器切片
获取列表的第一个或最后n个项目。我已经使用了你上面的建议,这在管理中似乎非常有效,但是我在访问模板中的这些值时遇到了问题。上面更新的问题显示了我的尝试。谢谢添加了更多信息,我没有测试,但我很确定您只是缺少了.value
属性,如果它不适合您,请告诉我。是的,我只是缺少了.value
属性。再次感谢您的帮助。是否有办法限制为仅12个最新图像?@kbdev在模板中,您可能可以使用内置过滤器切片
获取列表的第一个或最后n个项目。