Django Template Ternary Operator

后端 未结 6 817
慢半拍i
慢半拍i 2020-12-29 19:32

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 c

相关标签:
6条回答
  • 2020-12-29 19:46

    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.

    0 讨论(0)
  • 2020-12-29 19:54

    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.

    0 讨论(0)
  • 2020-12-29 19:58

    You can use the yesno filter:

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

    You can learn more here

    0 讨论(0)
  • 2020-12-29 20:00

    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

    0 讨论(0)
  • 2020-12-29 20:06

    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.

    0 讨论(0)
  • 2020-12-29 20:09

    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.

    0 讨论(0)
提交回复
热议问题