Хорошо - так.
Чтобы понять эту проблему, важно знать, как работает шаблонизирование дзиндзя.
Для решения: просто вставьте новую строку, например, такую:
{% if item.upstreams is defined %}
{% for u in item.upstreams %}
upstream {{ u.name }} {
{% if u.params is defined %}
{% for param in u.params %}
{{ param }}
{% endfor %}
{% endif %}
Причина этого заключается в том, как работает шаблонизация jinja.
При рендеринге jinja, он не знает, чтобы поместить вещи в новую строку, он просто знает, как поместить копию того, что находится в вашем цикле.Поэтому, если в вашем цикле отсутствует положение для новой строки, он не будет помещать элементы в новую строку.
, поэтому, когда у вас есть цикл, подобный вашему, или, проще, массив [a, b, c, d, e, f]
{% for i in items %}
{{ i }}
{% endfor %}
, он будет печататься как abcdef
, потому что {{i}}
буквально означает рендер i
here.
Поместив новую строку в ваш цикл.
{% for i in items %}
{{ i }}
{% endfor %}
он отобразит i
в конце последнего элемента в цикле, то есть на новой строке.
Говоря простым языком, вы хотите, чтобы i
также включил обеспечение новой строки в вашем цикле, чтобы, когда jinja отображал то, что находится в цикле, оно также отображало новую строку.
Если вы посмотрите на это так, первый упомянутый мной цикл будет выглядеть так abcde
, а второй цикл будет выглядеть так: a\nb\nc\nd\ne
, Как вы можете видеть, значение для каждого элемента в этом циклеесть положение для новой строки.
ps: это было действительно трудно объяснить :(