繁体   English   中英

Wagtail 将 StreamField 转换为 Dict

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM