Django Template Ternary Operator

PythonDjangoTemplatesTernary Operator

Python Problem Overview


I was wondering if there was a ternary operator (condition ? true-value : false-value) that could be used in a Django template. I see there is a python one (true-value if condition else false-value) but I'm unsure how to use that inside a Django template to display the html given by one of the values. Any ideas?

Python Solutions


Solution 1 - Python

You can use the yesno filter:

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

You can learn more here

Solution 2 - Python

Why would you need a ternary operator within a template? {% if %} and {% else %} are all you need.

Or you could try the firstof tag:

{% firstof var1 var2 var3 %}

which outputs the first one of var1, var2 or var3 which evaluates to a True value.

Solution 3 - Python

Just because they haven't been mentioned here yet: the built in template tags default, and default_if_none can be useful in simple circumstances:

>### default > >If value evaluates to False, uses the given default. Otherwise, uses the value. > >For example: > >{{ value|default:"nothing" }} > >If value is "" (the empty string), the output will be nothing. > >### default_if_none > If (and only if) value is None, uses the given default. Otherwise, uses the >value. > Note that if an empty string is given, the default value will not be used. Use >the default filter if you want to fallback for empty strings. > >For example: > >{{ value|default_if_none:"nothing" }} > >If value is None, the output will be the string "nothing".

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

Solution 4 - Python

You don't. The Django {% if %} templatetag has only just started supporting ==, and, etc. {% if cond %}{% else %}{% endif %} is as compact as it gets for now.

Solution 5 - Python

I've just implemented the ternary operator for Django as a tag, see https://github.com/alexei/django-template-extensions You can use it as:

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

Or:

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

I figured out that it makes more sense than the yesno filter, even though it's really not that Pythonic.

Solution 6 - Python

I wonder if the python and/or trick would work?

condition and true_value or false_value

behaves a like the ternary operator - outputs true_value if condition evaluates to True, and false_value if not.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAnonView Question on Stackoverflow
Solution 1 - PythonjeroenpView Answer on Stackoverflow
Solution 2 - PythonDaniel RosemanView Answer on Stackoverflow
Solution 3 - PythonptimView Answer on Stackoverflow
Solution 4 - PythonOliView Answer on Stackoverflow
Solution 5 - PythonAlexeiView Answer on Stackoverflow
Solution 6 - PythonhwjpView Answer on Stackoverflow