Мне было интересно, существует ли тройной оператор (условие? true-value: false-value), которое можно использовать в шаблоне Django. Я вижу, что есть python one (true-value if condition else false-value), но я не уверен, как использовать это внутри шаблона Django для отображения html, заданного одним из значений. Любые идеи?
Тройной оператор шаблонов шаблонов Django
Ответ 1
Зачем вам нужен трехмерный оператор в шаблоне? {% if %}
и {% else %}
- все, что вам нужно.
Или вы можете попробовать тег firstof
:
{% firstof var1 var2 var3 %}
который выводит первый из var1, var2 или var3, который оценивает значение True.
Ответ 2
Вы можете использовать фильтр yesno:
{{ value|yesno:"yeah,no,maybe" }}
https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#yesno
Ответ 3
Просто потому, что они еще не упоминались здесь: встроенные теги шаблона default
и default_if_none
могут быть полезны в простых обстоятельствах:
по умолчанию
Если значение принимает значение False, используется заданное значение по умолчанию. В противном случае используется значение.
Например:
{{ value|default:"nothing" }}
Если значение равно "(пустая строка), вывод будет ничем.
default_if_none
Если (и только если) значение равно None, используется заданное значение по умолчанию. В противном случае используется значение > .
Обратите внимание, что если указана пустая строка, значение по умолчанию не будет использоваться. Используйте > фильтр по умолчанию, если вы хотите отступить для пустых строк.
Например:
{{ value|default_if_none:"nothing" }}
Если значение равно None, на выходе будет строка" Nothing".
https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#default
Ответ 4
Нет. Шаблон tempatetag от Django {% if %}
только что начал поддерживать ==
, and
и т.д. {% if cond %}{% else %}{% endif %}
настолько компактен, насколько это возможно.
Ответ 5
Я только что применил тернарный оператор для Django в качестве тега, см. https://github.com/alexei/django-template-extensions Вы можете использовать его как:
{% ?: exp1 exp2 exp3 %}
{% ?: exp1 exp2 %}
Или:
{% iif exp1 exp2 exp3 %}
{% iif exp1 exp2 %}
Я понял, что это имеет больше смысла, чем фильтр yesno
, хотя это действительно не тот Pythonic.
Ответ 6
Интересно, работает ли python и/или трюк?
condition and true_value or false_value
ведет себя подобно тернарному оператору - выводит true_value, если условие имеет значение True, а false_value, если нет.