2014-11-16 4 views
2

На веб-сайте я строю с Flask Я хочу проверить, является ли переменная None. К моему удивлению, хотя, как-то просто, как это не работает:Как зарегистрировать пользовательский тест в Jinja2 (Flask)?

{% if my_var is not None %} 
    {{ my_var }} 
{% endif %} 

это выдает ошибку: TemplateAssertionError: no test named 'None'. Так следующее this example, я написал простой пользовательский тест:

def is_none(var): 
    if var is None: 
     return True 
    else: 
     return False 

, который я хочу зарегистрироваться в термос следующим образом:

from jinja2 import environment 
environment.tests['None'] = is_none 

но выдает ошибку, говоря AttributeError: 'module' object has no attribute 'tests'.

Кто-нибудь знает, что я здесь делаю неправильно? Или документация просто неправильная? Все советы приветствуются!

[EDIT] Хорошо, я получил немного дальше. Теперь я зарегистрировать тест с помощью этого:

from jinja2 import Environment 
environment = Environment() 
environment.tests['None'] = is_none 

, но когда я пытаюсь использовать его в моем шаблоне, я все еще получаю ошибку говоря TemplateAssertionError: no test named 'None'. Есть идеи?

+2

Вы можете просто использовать [встроенный 'none' тест] (http://jinja.pocoo.org/docs/dev/templates/#none). – dirn

+1

в соответствии с флаговыми документами, чтобы зарегистрировать фильтр jinja2, вам нужно иметь 'app.jinja_env.filters ['None'] = is_none'. Ссылка на документ: нажмите [здесь] (http://flask.pocoo.org/docs/0.10/templating/) –

+0

Да @dirn верна. Вы можете использовать встроенный фильтр jinja2 –

ответ

8

Чтобы зарегистрировать пользовательский тест, используйте следующий декоратор:

@app.template_test("none") 
def is_none(obj): 
    return obj is None 

Затем вы можете использовать is_none как тест: {% if my_var is none %}. Как отметил Дирн, это дублирует встроенный тест, но я думал, что отвечу на ваш первоначальный вопрос.

Документация на http://flask.pocoo.org/docs/0.10/api/#flask.Flask.template_test

Смежные вопросы