Как условно применить фильтр шаблона в Django?

#django #django-templates #django-template-filters

Вопрос:

Предположим, у меня есть шаблон Django с

 <div><b>{{some.long.expression.with.stuff|filter1}}</b></div>
 

и я хочу подать заявку только filter1 в том случае, если my_condition это правда.

Каков наилучший способ? Вот подробный способ с повторением:

 {% if my_condition %}
<div><b>{{some.long.expression.with.stuff|filter1}}</b></div>
{% else %}
<div><b>{{some.long.expression.with.stuff}}</b></div>
{% endif %}
 

Здесь немного менее многословно, труднее читать, все еще с некоторыми повторениями:

 <div><b>{% if my_condition %}{{some.long.expression.with.stuff|filter1}}{% else %}{{some.long.expression.with.stuff}}{% endif %}</b></div>
 

Предложения?

Ответ №1:

Вы можете работать с {% with … %} … {% endwith %} тегом шаблона:

 {% with somevar=some.long.expression.with.stuff %}
<div><b>{% if my_condition %}{{ somevar|filter1 }}{% else %}{{ somevar }}{% endif %}</b></div>
{% endwith %}