Django: Частое использование тега include template - сколько это слишком много? - PullRequest
0 голосов
/ 08 января 2019

Я заметил, что начал часто использовать шаблон include. Один из моих файлов шаблонов содержит более 20 тегов включения.

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

Я волнуюсь, если это слишком много и может негативно повлиять на производительность (поскольку Django загружает другие файлы и т. Д.)

Например, это разметка одного из моих HTML-фрагментов, которые я использую с include:

<div class="form-group">
    <input type="url" class="form-control" id="video-link-input" name="video_link"
           placeholder="YouTube link">
</div>

<input type="hidden" id="video_id" name="video_id" value="">

<img class="img-fluid img-thumbnail"  id="video-img-preview">

Надеюсь, вопрос не слишком широк. Я просто хотел бы избежать возможной плохой практики.

Ответы [ 2 ]

0 голосов
/ 08 января 2019

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

При настройках по умолчанию Django кэширует файлы шаблонов, когда DEBUG=False:

django.template.loaders.cached.Loader

...

Этот загрузчик включается автоматически, если OPTIONS['loaders'] не указано и OPTIONS['debug'] является False (последний параметр по умолчанию значение DEBUG).

ИМХО, наличие большого количества включений само по себе неплохая практика. Альтернативой будет повторение кода, который нарушает принцип СУХОГО.

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

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

0 голосов
/ 08 января 2019

Согласно документации Django :

  • при использовании {% block%} быстрее, чем при использовании {% include%}
  • сильно фрагментированные шаблоны, собранные из множества маленьких кусочков, могут влияет на производительность

Вы можете использовать extends и block

Несколько примеров: В base.html я использую эти блоки

...
{% block navbar %}
{% endblock %}

{% block sidebar %}
{% endblock %}

{% block searchbar %}
{% endblock %}

{% block content %}
{% endblock %}

{% block footer %}
{% endblock %}
...

Теперь я расширяю base.html в login.html. Скажите, мои login.html просто нужно navbar, content и footer

{% extends 'base.html' %}
<h1>Login </h1>
{% block navbar %}
   This is my navbar
{% endblock %}

{% block content %}
  Here is my login form
{% endblock %}

{% block footer %}
  This is footer
{% endblock %}

Теперь я расширяю base.html в home.html. Скажите, мои home.html нужны navbar, sidebar, searchbar, content и footer

{% extends 'base.html' %}
<h1>Home page </h1>
{% block navbar %}
   This is my navbar
{% endblock %}

{% block sidebar %}
    This is sidebar
{% endblock %}

{% block searchbar %}
{% endblock %}

{% block content %}
   This is homepage contents. This will not render which you use in login.html **content** block
{% endblock %}

{% block footer %}
{% endblock %}
...