Отступ двигателя шаблона 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, как это сделал я. См. мой вопрос с рабочим кодом:

правильный отступ в шаблонах Django (без исправления обезьян)?


другой вариант из вышеупомянутого-использовать красивое промежуточное ПО супа.

здесь учебник. Обратите внимание, что люди называют это промежуточное ПО `ОЧЕНЬ МЕДЛЕННО " и советы по кэшированию выходных страниц.