首页 > 解决方案 > Wagtail:如何获取图像再现 url 并将其与 json 中的其他字段一起传递?

问题描述

我将所有模型的数据传递给模板的上下文,以便在一个小的 vue 实例中使用它:

data = serializers.serialize("json", MyModel.objects.child_of(self).live().public())

我的模型有一个图像:

header = models.ForeignKey(
        "wagtailimages.Image",
        null=True,
        blank=False,
        on_delete=models.SET_NULL,
        related_name="+",
    )

现在我想添加图像渲染 url 以便能够在我的 vue 应用程序中处理渲染:

url = myimage.get_rendition('fill-300x186|jpegquality-60').url

但我在这个角色上挣扎myimage。恐怕我想解决的方法行不通,因为我处于模型级别并且还没有关于图像的信息,对吧?那么有没有用我的其他字段作为json查询/传递图像再现?

我知道 API 可以处理图像再现:

APIField("header", serializer=ImageRenditionField("fill-300x200|jpegquality-80"))

我不能使用 API,只喜欢模仿这种行为。

标签: pythonwagtail

解决方案


我回过头来,意识到我的第一个答案是垃圾。我认为您可以做的是创建一个属性,该属性将其存储为属性。

@property
def rendition_url(self):
    url = self.header.get_rendition('fill-300x186|jpegquality-60').url
    return url

然后您必须构建一个自定义序列化程序来解析为 JSON。

序列化 Python 类中的 @property 方法

这个答案提供了一个明确的例子,如何做到这一点。最佳答案已过时。使用下一个示例。


推荐阅读