5

我一直在使用 Wagtail 作为无头 CMS 与前端应用程序一起使用,但是我注意到有关图像的一些限制。通常在您的 jinja 模板中,您会生成所需的正确图像大小,一切都很好,但是我无法在我的前端代码中访问这些帮助程序。我一直在尝试几件事。例如,为了解决简单页面模型及其字段的问题,我可以呈现一个自定义 api 字段,如下所示:

api_fields = [
    # Adds information about the source image (eg, title) into the API
    APIField('feed_image'),

    # Adds a URL to a rendered thumbnail of the image to the API
    APIField('feed_image_thumbnail', serializer=ImageRenditionField('fill-100x100', source='feed_image')),
    ...
]

但是,这不适用于流场,因为它们只会返回图像 ID。所以我想我会使用 Wagtail 图像 API,但这也不允许我访问直接 URL。

我找到了一些参考本文档的谷歌小组答案:http: //docs.wagtail.io/en/v1.9/advanced_topics/images/image_serve_view.html

但是,此页面似乎不存在于最新版本的文档中,并且似乎不允许我从前端的 url 生成图像。

有没有办法创建一个允许我根据其 ID 获取图像的 url?

例如: somehost:8000/images/1?width=200&height=200

或者也许还有其他一些我忽略的解决方案。

我喜欢 wagtail,但无法轻松访问图像 url 确实限制了它的 API 使用,我希望有一个好的解决方案。

谢谢

编辑:我设法在文档中找到了这个:http: //docs.wagtail.io/en/v1.11.1/advanced_topics/images/image_serve_view.html

但是他们声明:

该视图在 URL 中获取图像 ID、过滤器规范和安全签名。如果这些参数有效,它将提供与该标准匹配的图像文件。

但是他们没有给出一个清晰的例子来说明这样的请求是什么样的,或者我将如何生成该安全签名。

4

1 回答 1

9

将图像再现作为 StreamField 数据结构的一部分的一种(有点笨拙)方法是覆盖ImageChooserBlockget_api_representation方法:

from wagtail.wagtailimages.blocks import ImageChooserBlock as DefaultImageChooserBlock

class ImageChooserBlock(DefaultImageChooserBlock):
    def get_api_representation(self, value, context=None):
        if value:
            return {
                'id': value.id,
                'title': value.title,
                'large': value.get_rendition('width-1000').attrs_dict,
                'thumbnail': value.get_rendition('fill-120x120').attrs_dict,
            }

然后,在您的 StreamField 定义中使用此版本ImageChooserBlock将为您提供“大”和“缩略图”再现作为 API 响应的一部分,而不仅仅是图像 ID。

于 2017-08-17T13:28:12.713 回答