在 Django 中使用带有 jinja2 的简易缩略图(或其他第 3 方库)

Using easy-thumbnails (or other 3rd party library) with jinja2 in Django

在 Django 的 Jinja2 中使用像 easy-thumbnails 这样的第三方过滤器的过程是怎样的?我需要以某种方式注册我需要使用的过滤器吗?具体来说,我想使用我以前使用的 thumbnail_url 过滤器:

<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'",)

您需要将过滤器添加到您的 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

您应该知道 easy-thumbnails 中的模板标签是为 Django 模板构建的。然而,在这种非常特殊的情况下,thumbnail_url 函数恰好也适用于 Jinja2 模板。

更好的实现方式是编写您自己的函数来包装在 easy-thumbnails 中实现的功能,并将这些函数用作您的 Jinja2 过滤器。