Использование easy-thumbnails (или другой сторонней библиотеки) с jinja2 в Django

Каков процесс использования стороннего фильтра, такого как easy-thumbnails, с Jinja2 в Django? Нужно ли как-то регистрировать фильтры, которые мне нужны? В частности, я хочу использовать 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'",)

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

Вы должны знать, что теги шаблонов в easy-thumbnails созданы для шаблонов Django. Однако в этом очень конкретном случае thumbnail_url Функция также работает с шаблонами Jinja2.

Лучшей реализацией было бы написать свои собственные функции, чтобы обернуть функциональность, реализованную в easy-thumbnails, и вместо этого использовать эти функции в качестве фильтров Jinja2.

Другие вопросы по тегам