Джанго Включает - они злые? - PullRequest
5 голосов
/ 19 декабря 2011

Мой друг и разработчик, которого я уважаю, недавно советовал избегать использования «Включений» в шаблонах django.Сумма их аргументов заключалась в том, что это «зло».

У меня проблемы с пониманием логики;Моё мнение новичка заключается в том, что они являются отличным способом организовать фрагменты повторно используемого HTML, и вместо того, чтобы редактировать HTML в нескольких местах, я могу просто отредактировать его в одном месте, когда необходимо внести изменения.

Что думают все ваши гении?Пожалуйста, предоставьте некоторые преимущества и недостатки использования включенных в шаблоны Django

Ответы [ 3 ]

9 голосов
/ 19 декабря 2011

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

Ваш друг может попытаться сказать, что вам следует больше полагаться на наследование шаблонов (что является своего рода противоположным включением). Это действительно так: в большинстве случаев лучше составлять шаблоны блоков, которые переопределяют или расширяют шаблоны, определенные в родительских шаблонах. Но определенно есть вариант использования для включений.

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

3 голосов
/ 19 декабря 2011

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

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

Важным моментом, на который следует обратить внимание, является то, что include не может содержать теги блоков, поскольку они отображаются самими без каких-либознание родительской страницы.Чтобы лучше это понять, см. Примечание к шаблонам документации, включающее или это (без ошибок) сообщение об ошибке .Если вам понадобятся эти функции, возможно, стоит подумать, стоит ли вместо этого перемещать включенный файл в базовый шаблон внутри тега блока.

2 голосов
/ 19 декабря 2011

Возможно, он говорит, что вам лучше писать собственные теги. Поэтому вместо:

{% for post in blog %}
{% include "blog.tmpl" %}
{% endfor %}

вы должны сделать:

{% for post in blog %}
{% formatPost post %}
{% endfor %}

Метод include полагается на то, что запись в блоге находится в объекте под названием «post», тогда как метод пользовательских тегов позволяет вам форматировать что угодно. Например, если у вас есть страница, которая сравнивает два сообщения в блоге, вы отправите их как «post1» и «post2» в контексте и выполните:

   <h1>John Said</h1>
   {% formatPost post1 %}
   <h1>And Fred Said</h1>
   {% formatPost post2 %}

Гораздо больше многоразового использования. С помощью включений вам придется переименовать каждый из post1 и post2 в «post», а затем включить шаблон ...

...