从JSON api或直接获取/生成图像URL的W ..

时间:2017-08-17 10:25:26

标签: django wagtail wagtail-streamfield

我一直在使用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')),
    ...
]

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

我发现一些google小组的答案参考了这个文档:http://docs.wagtail.io/en/v1.9/advanced_topics/images/image_serve_view.html

然而,这个页面似乎不存在于最新版本的文档中,并且似乎不允许我从前端的URL生成图像。

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

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

或者我可能会忽略其他一些解决方案。

我喜欢w ,,但没有轻易访问图片网址确实限制了它的API使用,我希望有一个很好的解决方案。

由于

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

然而他们说:

  

视图在URL中采用图像ID,过滤规范和安全签名。如果这些参数有效,则会提供与该条件匹配的图像文件。

但他们没有明确说明这样的请求是什么样的,或者我将如何生成该安全签名。

1 个答案:

答案 0 :(得分:5)

将图像呈现作为StreamField数据结构的一部分的一种(略微hacky)方法是覆盖ImageChooserBlock的{​​{1}}方法:

get_api_representation

在您的StreamField定义中使用此版本的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, } ,您将获得“' large'和' thumbnail'将再现作为API响应的一部分,而不仅仅是图像ID。