2017-08-17 84 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