Руководство по отступлению шаблона 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 %}