Отступ в шаблонном движке Django
Я с трудом пытаюсь заставить движок шаблонов Django правильно делать отступ при расширении / включении шаблонов
эти файлы:
index.html
<html>
<body>
<div id="hello">
{% block bar %}
{% endblock %}
{% include 'baz.html'%}
</div>
</body>
</html>
bar.html
{% extends 'foo.html' %}
{% block bar %}
<p>bar</p>
{% endblock %}
baz.html
<p>baz</p>
будет отображаться как
<html>
<body>
<div id="hello">
<p>bar</p>
<p>baz</p>
</div>
</body>
</html>
Как я могу это исправить, чтобы он выглядел как
<html>
<body>
<div id="hello">
<p>bar</p>
<p>baz</p>
</div>
</body>
</html>
Ручной ввод вкладок не вариант. Я использую мягкие вкладки (4 пробела), если когда-либо это имеет значение.
4 ответа
Отступ не вставляется автоматически при наследовании шаблона Django. Чтобы получить отступ, который вы хотите, вам нужно включить его в bar.html
:
{% extends 'foo.html' %}
{% block bar %}
<p>bar</p>
{% endblock %}
Вы должны объяснить с целью ваших потребностей отступа.
Отступы очень полезны на этапе отладки, но отступы несовместимы с оптимизацией, поскольку существует фильтр без пробелов.
Вы можете написать свой собственный разрезанный:
@register.tag
def myinden(parser, token):
args = token.contents.split()
n = args[1]
nodelist = parser.parse(('endmyinden',))
parser.delete_first_token()
return MyIndenNode(nodelist, n)
class MyIndenNode(Node, n):
def __init__(self, nodelist, n):
self.nodelist = nodelist
self.n = n
def render(self, context):
import re
regex = re.compile("^", re.M)
return re.sub(regex, "\t"*int(self.n),
self.nodelist.render(context).strip())
Для использования:
index.html
{% include 'baz.html' with indentation="8" %}
baz.html
{{ myindent:myindentation }}
...
Обратите внимание, не проверено. Также я предлагаю вам модифицировать сниппет, чтобы он работал только в режиме отладки:
Вы можете переопределить метод рендеринга NodeList, как я сделал. Смотрите мой вопрос с рабочим кодом:
Другой вариант из вышеперечисленных - использовать промежуточное ПО Beautiful Soup.
Вот учебник. Обратите внимание, что люди называют это промежуточное ПО " РЕАЛЬНО МЕДЛЕННЫМ" и советуют кэшировать выходные страницы.