我创建了一个自定义的photoBlock,可以在博客文章中嵌入照片。我正在尝试创建一个模板标签,这将允许我获取存储在数据库中的每个photoBlock,就像您在Wagtail中查询页面一样。我不想为每张照片创建单独的页面,而是可以通过模板标签在不同的页面上显示它们。
class photoBlock(blocks.StructBlock):
date = blocks.DateBlock("Date Image Was Taken")
location = blocks.CharBlock(max_length=100)
image = ImageChooserBlock()
latitude = blocks.DecimalBlock(max_digits=9, decimal_places=6)
longitude = blocks.DecimalBlock(max_digits=9, decimal_places=6)
description = blocks.RichTextBlock()
我能够让以下内容工作,但感觉问题非常沉重,一旦我收到一堆帖子就会陷入困境。
for page in BlogPage.objects.all():
for block in page.body.stream_data:
if block['type'] == 'photoBlock':
return block
有没有更好的方法从Streamfield查询特定块?任何时候我尝试这样的事情
photoBlock.objects.all()
我总是得到一个错误响应,即photoBlock没有属性Object。有什么想法吗?
答案 0 :(得分:0)
不幸的是,查询StreamField块没有比循环覆盖包含它们的所有页面更有效的方法了,正如您在代码片段中所做的那样。这是StreamField实现的限制 - 数据作为一个JSON字符串存储在页面对象上,而不是存储为" true"数据库对象。
答案 1 :(得分:0)
这里也没有真正的答案。你可以做些什么来改善你的查询是检查页面正文中是否存在字符串'photoBlock'。流数据只是存储为JSON字符串,因此只会产生包含该块的页面。