Шаблоны Django: Ложь по сравнению с Ничего

Как я могу различать None и False в шаблонах django?

{% if x %}
True 
{% else %}
None and False - how can I split this case?
{% endif %}
15
задан Lutz Prechelt 21 March 2016 в 12:12
поделиться

2 ответа

Каждый контекст шаблона Django содержит Истина , Ложь и Нет . Для Django 1.10 и новее вы можете сделать следующее:

{% if x %}
True 
{% elif x is None %}
None
{% else %}
False (or empty string, empty list etc)
{% endif %}

Django 1.9 и более ранние версии не поддерживают оператор is в теге if . В большинстве случаев вместо этого можно использовать {% if x == None%} .

{% if x %}
True 
{% elif x == None %}
None
{% else %}
False (or empty string, empty list etc)
{% endif %}

В Django 1.4 и ранее у вас нет доступа к True , False и None в контексте шаблона. Вы можете использовать дано вместо этого.

В представлении:

x = True
y = False
z = None

В шаблоне:

{{ x|yesno:"true,false,none" }}
{{ y|yesno:"true,false,none" }}    
{{ z|yesno:"true,false,none" }}    

Результат:

true
false
none
13
ответ дан 1 December 2019 в 03:42
поделиться

Вы можете создать собственный фильтр:

@register.filter
def is_not_None(val):
    return val is not None

, а затем использовать его:

{% if x|is_not_None %}
    {% if x %}
        True
    {% else %}
        False
    {% endif %}
{% else %}
    None
{% endif %}

Конечно, вы можете настроить фильтр, чтобы проверить любое условие, которое вам нравится ...

5
ответ дан 1 December 2019 в 03:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: