вторник, 15 декабря 2009 г.

Прощай ifequal

Думаю, всех задолбали кострированные темплейты в джанге, но в силу привычки/наличия существующего кода или еще чего люди с них не уходят и продолжают жрать кактус )

Самая простая ситуация:
if len(words) > 10:   print wordselse:   print trim(words)
Решается в джанге ну очень не явным способом )
Писался фильтр типа такого:
def gt(value, count):    return value > count
И использовался, как
{% if word|length|gt:3 %}
Думаю, вы согласитесь это выглядит упячисто (

Конечно, можно было использовать уже готовые решения из снипитов. Но если это надо только на одной странице, то мне очень сильно лень искать и подключать сторонюю библиотеку. Вот если бы все уже было в транке...

Итак, встречайте, новый полноценный темплейт тэг IF

Синтаксис повторяет питон, т.е.работают конструкции вида:
{% if word|length > 3 %}{% if price == 10 %}{% if age >= 18 and sex == 'women' and tits >= 3 %}    

Сиськи!!!

{% endif %}
Вот список допустимых операторов: ==, !=, <, >, <=, >= и in
Ну и булевы: and, or и not

И поясню, фильтрами пользоваться можно, обращение к методам так-же как и раньше, т.е. python:
cart.get_full_price()
django:
{% if cart.get_full_price == 0 %}

Поломанная совместимость

Раньше разрешалось использовать одно из зарезервированных имен (and, or или not) для переменной, но не в блоке IF. Сейчас нет )
Хотя, думается мне, такой нейминг явное ССЗБ...

ps может им кто-нибудь расскажет про jinja2? )

1 комментарий: