Джанго шаблон троичного оператора - PullRequest
48 голосов
/ 24 июня 2010

Мне было интересно, существует ли троичный оператор (условие? Истинное значение: ложное значение), который можно использовать в шаблоне Django.Я вижу, что есть Python один (true-значение, если условие, иначе false-значение), но я не уверен, как использовать это внутри шаблона Django для отображения HTML, заданного одним из значений.Есть идеи?

Ответы [ 6 ]

73 голосов
/ 22 мая 2011

Вы можете использовать фильтр yesno:

{{ value|yesno:"yeah,no,maybe" }}

https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#yesno

30 голосов
/ 24 июня 2010

Зачем вам нужен троичный оператор в шаблоне?{% if %} и {% else %} - все, что вам нужно.

Или вы можете попробовать тег firstof:

{% firstof var1 var2 var3 %}

, который выводит первый из var1, var2 или var3, который оцениваетк истинному значению.

18 голосов
/ 11 марта 2016

Просто потому, что они еще не были упомянуты здесь: встроенные теги шаблонов default и default_if_none могут быть полезны в простых обстоятельствах:

по умолчанию

Если значение равно False, используется заданное значение по умолчанию. В противном случае используется значение.

Например:

{{ value|default:"nothing" }}

Если значение равно "" (пустая строка), на выходе ничего не будет.

default_if_none

Если (и только если) значение Нет, используется заданное значение по умолчанию. В противном случае используется значение>.

Обратите внимание, что если задана пустая строка, значение по умолчанию не будет использоваться. Используйте> фильтр по умолчанию, если вы хотите использовать запасные пустые строки.

Например:

{{ value|default_if_none:"nothing" }}

Если значение равно None, выводом будет строка «nothing».

https://docs.djangoproject.com/en/1.9/ref/templates/builtins/#default

5 голосов
/ 11 октября 2012

Я только что реализовал троичный оператор для Django в виде тега, см. https://github.com/alexei/django-template-extensions Вы можете использовать его как:

{% ?: exp1 exp2 exp3 %}
{% ?: exp1 exp2 %}

Или:

{% iif exp1 exp2 exp3 %}
{% iif exp1 exp2 %}

Я понял, что он имеет больше смысла, чем фильтр yesno, хотя на самом деле это не тот Питон.

4 голосов
/ 24 июня 2010

Ты не. Шаблонный тег Django {% if %} только начал поддерживать ==, and и т. Д. {% if cond %}{% else %}{% endif %} настолько компактен, насколько это возможно.

1 голос
/ 24 июня 2010

Интересно, будет ли работать питон и / или трюк?

condition and true_value or false_value

ведет себя как троичный оператор - выводит true_value, если условие оценивается как True, и false_value, если нет.

...