/ / Django шаблон вдлъбнатина на двигателя - django, django-шаблони, вдлъбнатина

Джанго шаблон на двигателя вдлъбнатина - django, 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 интервала), ако някога това има значение.

Отговори:

6 за отговор № 1

Отстъпът не се вмъква автоматично от наследяването на шаблона на Django. За да постигнете отстъпа, който желаете, трябва да го включите в него bar.html:

{% extends "foo.html" %}

{% block bar %}
<p>bar</p>
{% endblock %}

2 за отговор № 2

Трябва да обясните с каква е целта на вашите нужди за отстъп.

Отстъпът е много полезен при стъпка на отстраняване на грешки, но вдлъбнатината не е съвместима с оптимизацията, тъй като това съществува безпространствен филтър.

Можете да напишете свой собствен фрагмент:

@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 }}
...

Забележете, не е тестван. Също така ви предлагам да промените фрагмента, който да работи само в режим на отстраняване на грешки:


1 за отговор № 3

Можете да отмените метода на визуализация на NodeList, както съм свършил. Вижте въпроса ми с работен код:

Правилно вдлъбнатина в шаблоните на Django (без маймунски лепенки)?


1 за отговор № 4

Друга възможност от гореспоменатите е да използвате междинния софтуер Beautiful Soup.

Тук е настойнически, Имайте предвид, че хората наричат ​​този междинен софтуер да е ``ИСТИНСКИ СЛЕД"" и съвети, кеширащи изходните страници.