[英]Wagtail Convert StreamField to Dict
我正在尝试将 models.py 中的流场转换为保存时的字典,这样我就可以获取数据并对其进行处理。
from django.http import JsonResponse
import json
class ProductBlogPage(BlogDetailPage):
product_details = StreamField([
('product_name_and_url', blocks.ProductNameAndUrlBlock()),
],
null=True,
blank=True,
use_json_field=True,
)
def save(self, *args, **kwargs):
# Here I want to turn the product_details data into a dict
print('self.product_details')
在打印时,它显示了由 StreamField 创建的一堆 HTML 代码,因此我可以用 hacky 的方式将其转换为字符串,用 .replace 对其进行操作,然后将其导入 json 或 JsonResponse 但我想学习正确的方法这个。
当我尝试使用 json 或 JsonResponse 加载它时,出现错误
the JSON object must be str, bytes or bytearray, not StreamValue
product_details.raw_data
是一组字典(每个块一个元素),唯一的 HTML 应该用于格式化富文本。 这是存储在数据库中的值。
您可以遍历数组并从那里访问所有键/值对。 例如
<ul>
{% for product in self.product_details.raw_data %}
<li>{{ product.sku }} - {{ product.name }}</li>
{% endfor %}
</ul>
或者传入一些JS进行处理渲染
{{self.product_details.raw_data|json_script:"product_details"}}
<script>someJS('product_details')</script>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.