В Python есть два способа использования if
и else
: либо для логического управления потоком, и в этом случае он используется с двоеточием и отступом, либо как выражение в одной строке, как описано в https://www.pythoncentral.io/one-line-if-statement-in-python-ternary-conditional-operator/.
Насколько я могу судить, теги {% if %}
... {% else %}
... {% endif %}
языка шаблонов Django эквивалентны первым. Однако мне было интересно, могу ли я каким-то образом реализовать последнее для рефакторинга кода ниже:
<form action="" method="post">{% csrf_token %}
{% for field in form %}
{% if field.name == "checkin_type" %}
<div class="auto-submit">
{{ field.errors }}
{{ field.label_tag }}
{{ field }}
</div>
{% else %}
<div>
{{ field.errors }}
{{ field.label_tag }}
{{ field }}
</div>
{% endif %}
{% endfor %}
<input type="submit" value="Send message" />
</form>
Здесь я перебираю поля формы и добавляю определенный класс "auto-submit"
к охватывающему элементу <div>
определенного поля ("checkin_type"
). Я хотел бы реорганизовать это в соответствии со следующим «псевдокодом»:
<form action="" method="post">{% csrf_token %}
{% for field in form %}
<div class="{% if field.name=='checkin_type'%}auto-submit{% else %}{% endif %}">
{{ field.errors }}
{{ field.label_tag }}
{{ field }}
</div>
{% endfor %}
<input type="submit" value="Send message" />
</form>
Другими словами, я хотел бы уменьшить повторение кода, используя операторы if
...else
только в определении class
, используя своего рода тернарный оператор. Возможно ли это в DTL?
Кстати, если я попытаюсь загрузить шаблон с кодом выше, я получу TemplateSyntaxError
:
Не удалось разобрать остаток: '=='checkin_type'' из 'field.name=='checkin_type''
Возможно, мне просто нужно правильно экранировать цитату?