2016-02-25 120 views
1

Django中Jinja2使用像easy-thumbnails這樣的第三方過濾器的過程是什麼?我是否需要註冊我需要使用的過濾器?具體而言,我想用thumbnail_url過濾器,我用這樣的:在Django中使用easy-thumbnails(或其他第三方庫)與jinja2

<img src="{{ the_thing.image|thumbnail_url:'homepage_large' }}"> 

我試圖將其轉換爲Jijnja2語法像這樣:

{{ the_thing.image|thumbnail_url('homepage_large') }} 

但出現以下錯誤:

django.template.base.TemplateSyntaxError: ("no filter named 'thumbnail_url'",) 

回答

1

您需要將過濾器添加到您的Jinja2環境:

def environment(**options): 
    env = Environment(**options) 
    env.globals.update(**{ 
     'static': staticfiles_storage.url, 
     'url': reverse, 
    }) 

    # add easy-thumbnails function as a Jinja2 filter 
    from easy_thumbnails.templatetags.thumbnail import thumbnail_url 
    env.filters.update(**{ 
     'thumbnail_url': thumbnail_url, 
    }) 

    return env 

您應該知道,簡單縮略圖中的模板標籤是爲Django模板構建的。然而,在這個非常特殊的情況下,thumbnail_url函數也恰好適用於Jinja2模板。

更好的實現方法是編寫自己的函數來實現易於縮略圖實現的功能,並將這些函數用作Jinja2過濾器。

+0

難道這就是所有第三方工具需要整合的方式嗎?或者我們應該期望他們可能會通過其他方式將自己注入環境中,所以我們不需要這樣做? – Chris

+0

對於Jinja2,您應該期望自己將所有內容添加到環境中。話雖如此,我發現Jinja2比Django模板更強大,值得使用額外的努力。 –