Pull to refresh

Comments 38

Да, все это замечательно, но иногда так не хватает elif...=(
Ну, если иногда, да ещё так не хватает, думаю, можно написать:

{% if condition %}
{% else %}
    {% if other_condition %}
    {% endif %}
{% endif %}
Да обычно в коде выкручиваюсь. Жуть как не люблю вложеные условия. Но да, логичный вариант. Джаного рулит и педалит, не бросать же его из-за одного тега=)))
да ладно вам, как будто нет кастомных тегов if с endif в комлекте :)
Обожаю джанго за вот такие красивые вещи.
Э… пардон. Мне тоже нравится Джанга, но про какую именно красивую вещь вы говорить в данном случае?
Я перешел на тёмную сторону и использую jinja2. Из удобств не только умный if
Поддерживаю насчет Jinja2. На самом деле из всех аргументов разработчиков Джанги против нормальной логики в шаблонах, я вижу только один валидный и это упрощение разработки шаблонов для дизайнеров. Хотя, на мой взгляд, Jinja2 нисколько не сложнее в понимании чем движок самой Джанги.
а зачем вообще выносить в классическом и строгом mvc массивную логику в представление? Вот честно, зачем вам это?

вы бы хоть сказали, что производительность вы, кеширование аккуратней, прекомпиляция шаблонов и все такое, но логики не хватает… Это ж ерунда.
jinja2 великолепная вещь, жизнь упрощает капитально
Только не нужно переусердствовать :-)
Есть бизнес-логика, а есть логика представления. Как раз «недоразвитые» джанго-шаблоны и принуждают разработчиков, логику представления тянуть в обработчики поведения. В некоторых случаях даже заставляют смешивать код и разметку. И всяческие многочисленные костыли в виде темлейт-тегов только усугубляют положение.
И именно поэтому здорово, что джанго-шаблоны не стоят на месте, а развиваются. Да, таких возможностей тега if иногда не хватало для реализации именно шаблонной логики. Но теперь они появились. Но, как говорит автор статьи, не стоит переусердствовать, забыв о разделении бизнес логики и логики представления.
А мне так нравилось
>ограничение на работу тега только с переменной, которая имеет значение «true» было введено умышленно, чтобы подстрекать программистов разделять представление и логику

теперь во всяких приложениях свитчеры с пхп будут всю логику в шаблонах писать :(
Дааа. Я-то думал, чем мне джанговские шаблоны не по душе. В них нет тега <?php.
а мне вот понадобилось из шаблона дернуть ф-ю и проитерироваться по ее результату.
и стало понятно что от шаблонов джанги надо уходить :(

потом что писать свой тег на этот случай — изврат
Может лучше сменить сферу деятельности? )))
UFO just landed and posted this here
не надо кидаться огульными обвинениями…

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

идеальным был бы вариант: я передаю в шаблон функцию, которая возвращает заданное число записей, в шаблоне она дергается и по возвращенным ей результатам строится нужная таблица (список или что там надо дизайнеру). в любом другом шаблонном движке (от Cheetah до Jinja2) я бы так и сделал.
но не тут.

вопрос — и что тут такого плохого в том что я не размазываю абстракцию по слоям, а хочу собрать в одном месте?
UFO just landed and posted this here
мдя… дурное влияние леммингов %-\
UFO just landed and posted this here
Всё хорошо, но заголовок нужно перевести «if умнеет». Или «Оператор if умнеет». :))) А так получается что-то вроде машинного перевода.
Вообще-то это специально так переведено, чтобы звучало более провокационно. ;)
Собирался засесть за изучения Django, но после этой статьи как-то задумался.
Оператор if в любом языке — один из базовых. Если в шаблонах джанго он не доведён до ума (или находится в процессе), это говорит о достаточно сыром его состоянии.
вы очень ошибаетесь. Это сознательное решение, которое императивно подталкивает разработчиков не выносить логику в шаблоны.

Вы же не жалуетесь, что в Джаве не хватает множественного наследования, или что в интерпретаторах используется подсчет ссылок вместо явного выделения памяти!
На концептуальные решения я не жалуюсь. В конце концов не нравиться язык/фреймворк/библиотека/ещё-что-то — не используй.
Я про саму реализацию. Например про баг "x or x == 0 парсилось как (x or x) == 0 вместо x or (x == 0).". Если задекларирован разбор логики, то он должен работать. Если не работает — реализация сыра. Меня собственно это и удивляет — простой базовый оператор и не работает.
а по моему вы бред несете!
задумывайтесь, и еще раз задумывайтесь, и ничего не учите!!!

PS django — это не только if в шаблоне.
Не горячитесь. Лучше объясните мне почему автор предлагает написать собственный парсер для if? Да, я понимаю, что для каждого проекта надо прописывать собственную логику, отдавая в шаблоны сформированные данные, но неужели надо переписывать ещё и стандартные тэги? Или это только IF так выделился?
Автор погорячился, не надо ничего переписывать, все уже давно написано за вас и нас. У меня где-то валялась специальная самосборная django app, сборная солянка изо всяких готовых расширений для тегов Джанго, там точно есть этот тег и другие сложные варианты стандартных тегов.

Но я перестал этим пользоваться, потому что в шаблонах не нужно, повторяю, не нужно, реализовывать никакой логики или, господа ради, каких-нибудь сложных switch/case.

Ну а про баг… Баг и баг, бывает. Уже поправили, кстати. В целом ядро django — крайне стабильная разработка, с прекрасной архитектурой, литературного качества кодом и супержесткими правилами принятия коммитов. Если точно, разработчиков там чуть ли не сотни, а права коммитов в репоз есть хорошо если у десятка человек.

В общем, если вам нравится Питон, то понравится и фремворк.

Мне он уже нравиться. Но из-за не правильно понятой статьи испытал когнитивный диссонанс :)
Спасибо за комменты, теперь всё стало на свои места.
Вы, наверное, просто не так поняли то, что написано в статье.

Был сниппет с «умным» тегом if. Пример кода, который написал Chris Beaven. Сниппет стал популярным, его стали часто использовать. Решили включить аналогичный функционал в саму джангу. Перед включением сниппет привели в порядок и переписали. Описанный баг — это баг сниппета, а не того кода, который включен в джангу. В джанге все отлично работает, на тег if есть куча юнит-тестов, по этому поводу не переживайте.
Спасибо за разъяснение, всё понятно.
Исчерпывающее количество комментариев :)
Эх, всё-таки Вы невнимательно читали и поторопились с выводами.

Этот подраздел имеет заголовок «Много свободного времени?», и находится в разделе «Докопаемся до истины», который начинается со слов «Давайте посмотрим, что происходит там внутри (если вы не один из тех, кто любит ковыряться во внутренностях, можете пропустить эту часть).»

Автор считает, что если Вы заинтересовались, то, возможно, Вам также будет интересно и самому попробовать своими руками пощупать, что такое парсер.
Вот после таких комментариев возникает вопрос, плохо ли я перевёл, или Вы невнимательно читали.

Попробую объяснить, вдруг вина всё-таки моя: ошибки в парсинге были не в джанговом теге if, а в сниппете, который Крис накидал для себя за выходные. А когда это решили-таки добавить в Джанго, парсер допилили до ума.

Попробуйте перечитать топик с новыми силами, и не ночью, а после сна.
Вы всё хорошо перевели. Просто я не «в теме», поэтому и задаю нубские вопросы.
В настоящий момент я разрабатываю сайты на Drupal. Отлично знаю систему, потратив на её изучение несколько лет. Решил, что пришло время освоить что-то новое. После поисков (rails, framework, etc.) остановился на django — отличный язык, отличный фреймворк.
И спасибо за статью :)
Sign up to leave a comment.

Articles