Руководство по отступлению шаблона Django

Существует PEP 8 для Python, но я не видел предпочтительной директивы отступов для шаблонов django.

Что я имею в виду, я обычно отступаю так:

<span>outside</span>
{% if condition %}
    <span>within condition</span>
{% endif %}
<span>outside</span>

Пока это выглядит хорошо в редакторе, но он будет выглядеть дерьмом в виде источника следующим образом:

<span>outside</span>
  <span>within condition</span>
<span>outside</span>

Это даже ухудшилось бы в отступе HTML, см. ниже:

<div>
    <span>outside</span>
    {% if condition %}
        <span>within condition</span>
    {% endif %}
</div>

станет:

<div>
    <span>outside</span>
        <span>within condition</span>
</div>

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

Ответ 1

В настоящее время я следую своему собственному соглашению в директиве шаблонов django для согласованности. Правило простое:

  • Ярлык Django НЕ увеличивает уровень отступа
  • HTML-тег делает увеличивает уровень отступов

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

<html>
<body>
  <ul>
    {% if condition %}
    {% for item in menu_item %}
    <li>{{ item }}</li>
    {% endfor %}      
    {% endif %}
  </ul>
  <main>
    {% block content %}
    <p>Hello World</p>
    {% endblock content %}
  </main>
</body>
</html>

Боковое примечание

Я использую 2 пробела для отступов HTML, потому что HTML имеет очень глубокое вложенное.

Для пользователя Vim обратите внимание, что синтаксис не html, а htmldjango

Таким образом, мой ~/.vimrc выглядит примерно так:

autocmd Filetype htmldjango setlocal ts=2 sts=2 sw=2 expandtab

Ответ 2

В зависимости от вашего редактора существуют способы установки определенной ширины отступа для файлов HTML.

Что касается тегов Django, на самом деле хорошо не добавлять уровень отступа. См. Этот пример:

<ul>
    {% for item in items %}
        <li>{{ item }}</li>
    {% endfor %}
</ul>

Будет отображаться следующим образом:

<ul>
        <li>Bacon</li>
        <li>Ninja</li>
        <li>Tumbleweed</li>
</ul>

И нам не нужны два уровня отступа. Вместо этого:

{% block content %}
<ul>
    {% for item in items %}
    <li>{{ item }}</li>
    {% endfor %}
</ul>
{% endblock content %}