Есть ли причина, по которой меня отговаривают от использования альтернативного движка шаблонов в моем приложении Django? - PullRequest
3 голосов
/ 22 ноября 2010

Я сделал несколько небольших проектов Django, и каждый раз меня поражали очевидные ограничения языка шаблонов Django.Как случайный пример, я был шокирован, узнав, что если в контексте шаблона у меня есть переменная bar и dict foo, я не смогу получить доступ к foo [bar], если не написал свой собственный фильтр для этого.

Я читал, что причина этого в том, что Django был создан для сред, где люди, разрабатывающие страницы, не были программистами.Я это понимаю.

Но скажем, для меня это не проблема.Есть ли причина, по которой я должен придерживаться языка шаблонов Django, а не переключаться на что-то с гораздо большей мощью, как Mako (где вы даже можете выполнять произвольные выражения Python)?

У меня была возможность использовать Мако для школьного проекта некоторое время назад, и мне очень понравилась его сила.Например, в рамках проекта нам нужно было создать большую таблицу, в которой построение каждой строки и ячейки было довольно сложным.Тем не менее, я мог бы заставить мой шаблон выглядеть примерно так:

<table>
    % for foo in foos:
        ${makerow(row)}
    % endfor
</table>

<%def name="makerow(row)">
    <tr>
        # Blah blah blah (possibly a call to makecell somewhere)
    </tr>
</%def>

Может быть, это нарушение разделения представления и логики, но, черт возьми, это красиво и чисто.Подпрограммы!Абстракция!Хорошие вещи.

И дополнительный вопрос: если сообщество Django не осуждает использование альтернативного языка шаблонов, кто-нибудь может предложить?Как я уже сказал, мне действительно нравится Мако, но я буквально единственный, кого я использовал, кроме Джанго.

Ответы [ 6 ]

4 голосов
/ 22 ноября 2010

Я буду честен, я не полностью прочитал ответы. Но я предполагаю, что в нем много «нет питона в ваших шаблонах» и «ваш взгляд не должен иметь много логики».

Если вы отбросите идеализм и выберете прагматизм, то я думаю, что Мако - прекрасный выбор. Я использую его в производственных мощностях (в основном для скорости, мощности и динамического наследования) уже более 3 лет. Это не подвело и не раздражало по-другому.

Идеалисты правы, но иногда вы должны идти на то, что выполнимо, а что правильно. Если вы не ограничены движком Django, используйте его. Если вам нужно больше силы, Мако и Джинджа - прекрасный выбор.

Django упрощает замену шаблонизаторов и поддерживает большинство вещей, как прежде: http://docs.djangoproject.com/en/dev/ref/templates/api/#using-an-alternative-template-language

3 голосов
/ 22 ноября 2010

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

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

Если вы хотите использовать Mako вместо шаблонизатора Django, просто используйте Mako.

2 голосов
/ 22 ноября 2010

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

В прошлом году было предложение по проекту GSoc от Alex Gaynorсделать быструю загрузку шаблона.- Затем он был отозван в пользу проекта NoSQL.

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

Если вы действительно ищете связующий фреймворк для потрясающих библиотек Python, включая те, которые вы выбираете, Flask там .

1 голос
/ 22 ноября 2010

addons.mozilla.org использует Django + Jinga: https://github.com/jbalogh/zamboni

Не уверен, что сообщество недовольно относится к Jinga, но многим это нравится, например.

0 голосов
/ 22 ноября 2010

Ваш пример напоминает мне старые времена PHP, когда люди смешивали PHP с html повсюду. Чувствовал себя действительно мощным. Пока в один прекрасный день люди не поняли, что беспорядок не поддерживается.

Если дизайн разделен на «функции», поймет ли тогда дизайнер? Это, вероятно, будет раздражать его.

0 голосов
/ 22 ноября 2010

Если вы имели в виду «приложение», а не «проект», и это не для полностью частного использования, я бы порекомендовал вам не менять движок шаблонов; это значительно снизит вероятность того, что приложение будет использоваться кем-либо еще, поскольку потребует от них изменения некоторых основных настроек, а также может нарушить взаимодействие между ним и другими приложениями или проектом в целом.

...