Сообщить об ошибке.

Встроенные и пользовательские тесты для jinja2 в Python

Создание собственных тестов и описание встроенных тестов jinja2

Тесты можно использовать для проверки переменной на соответствие общему выражению. Чтобы проверить переменную или выражение, необходимо добавить is плюс имя теста после переменной. Например, чтобы узнать, определена ли переменная, можно написать name is defined, которое затем вернет True или False в зависимости от того, определено ли имя в текущем контексте шаблона.

Тесты тоже могут принимать аргументы. Если тест принимает только один аргумент, то скобки можно опустить. Например, следующие два выражения делают одно и то же:

{% if loop.index is divisibleby 3 %}
{% if loop.index is divisibleby(3) %}

Содержание:


Создание собственных тестов для jinja.

Тесты в модуле jinja2 работают примерно также как фильтры, различие в том, что у теста нет возможности получить доступ к среде Environment или контексту и что их нельзя связать цепочкой.

Возвращаемое значение теста должно быть True или False. Цель теста - дать разработчикам шаблонов возможность выполнять проверки типов и совместимости.

Вот простой тест, который проверяет, является ли переменная простым числом:

import math

def is_prime(n):
    if n == 2:
        return True
    for i in range(2, int(math.ceil(math.sqrt(n))) + 1):
        if n % i == 0:
            return False
    return True

Написанный тест можно зарегистрировать в среде шаблонов, обновив переменную Environment.tests:

environment.tests['prime'] = is_prime

Затем разработчик шаблонов может использовать тест следующим образом:

{% if 42 is prime %}
    42 is a prime number
{% else %}
    42 is not a prime number
{% endif %}

Встроенные тесты модуля jinja.


boolean(value):

Тест boolean() возвращает True, если объект value является логическим значением.

Новое в версии 2.11.

callable(obj, /):

Тест callable() возвращает, является ли объект obj вызываемым (то есть какой-то функцией).

Обратите внимание, что классы являются вызываемыми, как и экземпляры классов с методом __call__().

defined(value):

Тест defined() возвращает True, если переменная value определена:

{% if variable is defined %}
    value of variable: {{ variable }}
{% else %}
    variable is not defined
{% endif %}

Смотрите фильтр default(), чтобы узнать простой способ установить неопределенные переменные.

divisibleby(value, num):

Тест divisibleby() проверяет, делится ли переменная value на число num.

eq(a, b, /):

Тест eq() - то же самое, что a == b.

escaped(value):

Тест escaped() проверяет, экранировано ли значение.

even(value):

Тест even() возвращает True, если переменная четная.

false(value):

Тест false() возвращает True, если объект False.

Новое в версии 2.11.

float(value):

Тест float() возвращает True, если объект является float.

Новое в версии 2.11.

ge(a, b, /):

Тест ge() - то же самое, что a >= b.

gt(a, b, /):

Тест gt() - то же самое, что a > b.

in(value, seq):

Тест in() проверяет вхождение/наличие value в seq.

integer(value):

Тест integer() возвращает True, если объект является целым числом.

Новое в версии 2.11.

iterable(value):

Тест iterable() Проверяет, можно ли перебирать объект.

le(a, b, /):

Тест le() - то же самое, что a <= b.

lower(value):

Тест lower() возвращает True, если value в нижнем регистре.

lt(a, b, /):

Тест lt() - то же самое, что a < b.

mapping(value):

Тест mapping() возвращает True, если объект является отображением (словарь и т.д.).

ne(a, b, /):

Тест ne() - то же самое, что a != b.

none(value):

Тест none() возвращает True, если переменная равна None.

number(value):

Тест number() возвращает True, если переменная является числом.

odd(value):

Тест odd() возвращает True, если переменная нечетная.

sameas(value, other):

Тест sameas() проверяет, указывает ли объект value на тот же адрес памяти, что и другой объект other:

{% if foo.attribute is sameas false %}
    'foo.attribute' на самом деле синглтон `False`
{% endif %}

sequence(value):

Тест sequence() возвращает True, если value является последовательностью.

string(value):

Тест string() возвращает True, если объект является строкой.

true(value):

Тест true() возвращает True, если объект True.

Новое в версии 2.11.

undefined(value):

Тест undefined() работает как defined(), но наоборот.

upper(value):

Тест upper() возвращает True, если value записана в верхнем регистре..