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?
6 Answers
5 Comments
{{ expr_or_value | yesno : "the string", other_variable_value }}{{ value|yesno: "checked," }} if you want to use this for presetting checkboxesWhy 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.
5 Comments
{% if data_complete %}{{ data }}{% else %}{{ something_else }}{% endif %} became <%= data_complete ? data : something_else %> ... the second is so much more compact and elegant. It would be nice if there was an equivalent in django.<a class="btn {% if prospect.has_been_called %}btn-warning{% else %}btn-success{% endif %} d-block" We want ternary, just like we wanted wheels 10000 years agoJust 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
2 Comments
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.
1 Comment
|yesnoI 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.