2017-08-17 54 views
1

我一直在使用W as作为无头CMS与前端应用程序一起使用,但是我注意到了有关图像的一些限制。通常在您的jinja模板中,您可以生成所需的正确图像大小,并且一切都很好,但是我无法访问我的前端代码中的这些助手。我一直在尝试几件事情。例如,为了解决这个简单的页面模式和他们的田地,我可以呈现一个定制的API领域,像这样:W getting从JSON 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。所以我想我会使用W image图片API,但是这不允许我访问直接URL。

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

本页面似乎但是不会在文件的最新版本存在,似乎并没有让我产生从URL上的图像前端。

有没有办法创建一个url,使我可以根据它的ID获取图像?

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

或许有我俯瞰一些其他的解决办法。

我喜欢w but,但不容易访问图像网址真的限制了它的API使用,我希望有一个很好的解决方案。

感谢

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

但是他们的状态:

视图拍摄图像ID,过滤器的规格和安全签名网址。如果这些参数有效,则它会提供符合该条件的图像文件。

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

回答

3

一(略哈克)的方式来获得的图像再现作为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。

+0

这将完美适用于我的用例!谢谢:) 我希望这是更多的文件或更容易配置,无法想象别人没有与API类似的问题 – Samuel