Определить пустую переменную шаблона в Django

Я не могу определить, пуста ли переменная при использовании в шаблоне. Я повторил всю коллекцию, и в каждом я ищу переменную narrative_text.

Я проверил пустую переменную на

{% ifnotequal narratives.narrative_text '' %}

Я замечаю, что элемент управления входит в этот блок, но ничего не печатает, когда

{{  narratives.narrative_text }} 

.

Итак, как я могу точно проверить, пуста ли переменная?

Я прочитал документы и выяснил, что недопустимые/пустые переменные шаблона заменены на ''.

Док говорит, что

система шаблонов вставляет значение параметра TEMPLATE_STRING_IF_INVALID.

Нужно ли явно вводить это в settings.py? Я пытался это сделать, но все же я не смог заставить его работать.

c=Context({ 
    "narratives_list":all_narratives,
    "patient_name":care_seeker_name
})

all_narratives возвращается вызовом базы данных pymongo.

{%  for narratives in narratives_list  %}
<tr>
<td class = "date_col">
    7 Aug, 2012
</td>
{%  ifnotequal narratives.narrative_text '' %}
<td>
<div class = "narrative">
    ( text narrative )
<b> 
    {{ narratives.about }}
</b>
<br><br>
{{ narratives.narrative_text }}
</div>  
</td>   
{%  else %}
<td>
<div class="scans">
<div class="gallery">
<b> {{ narratives.about }}</b>
<br><br>
<a href="#" onclick="location.href='https://udhc1-nodejstest.rhcloud.com/my_image/{{ narratives.file_id }}'; return false;">
<img src="https://udhc1-nodejstest.rhcloud.com/my_image/{{ narratives.file_id }}" width="72" height="72" alt="" />
</a>
</div>
</div>
</td>
{%  endifnotequal %}

Ответ 1

Длина трубы и выполнить тест против этого значения.

{% if narratives.narrative_text|length > 0 %}
    {{ narratives.narrative_text }}
{% else %}
    None
{% endif %}

Ответ 2

Просто используйте {% if narratives.narrative_text %}, я думаю. Он будет использовать Python implicit false, который применяется для пустых строк, пустых массивов, пустых dicts, None, False, 0 и т.д.

Ответ 3

Вы можете написать Пользовательский фильтр шаблонов, is_empty для проверки. Возвращаем false, если переменная пуста и true, если значение существует.

{% if narratives.narrative_text|is_empty %}
    # dosomthing 
{% else %}
    # dosomthing 
{% endif %}

Ответ 4

Только что подтвердил через мой собственный код, используя django 2.1.3 и python 3.5 и 3.7, что работает следующее:

{% if narratives.narrative_text %}
    # do something
    {{ narratives.narrative_text }}
{% else %}
    # do something else
    None  # displays "None" 
{% endif %}

Ответ 5

Я думаю, что лучшее и очевидное решение было бы на языке шаблонов Django:

{% if objects is not None %}
    {% for obj in objects %}
        {{obj}}   // Do your stuff here
    {% empty %}
        No results.    // No results case
    {% endfor %}
{% endif %}

Если переменные objects не заданы, ничего не будет распечатано.

У меня были похожие трудности. Надеюсь, поможет.

Ответ 6

Я использовал jijnja, который очень похож и прост, и я думаю, что он сработает, если вы сделаете

{% if not narratives.narrative_text %}
  // do something 
{% else %}
 // do something else  with or without {{ narratives.narrative_text }}
{% endif %}

Он использует неявный True/False,None, и т.д. python для выполнения задания. Проще говоря, используйте переменные python внутри {{ }} и условные обозначения и т.д. Внутри {% %}