Как проверить, равно ли значение из поля в табличном объекте определенной строке на языке шаблонов django?

#python #django #django-templates

#python #django #django-шаблоны

Вопрос:

Я перебираю все записи в таблице django, называемой Ideas. Одно поле в таблице status , и я хочу проверить, равен ли статус некоторой конкретной строке. Я уже проверил, что я правильно обращаюсь к этому полю, с idea.status в моем случае, но я не могу найти, как сравнить эту запись с определенной строкой в документах языка шаблонов django. Я пытаюсь изменить цвет ячейки таблицы на основе того, что находится в этой ячейке. Вот что я пробовал, но безрезультатно:

 {% for idea in ideas_list %}
...
        {% if idea.status == 'Not Started' %}
        <td style="background-color:red;">
        {% elif idea.status == 'Completed' %}
        <td style="background-color:green;">
        {% elif idea.status == 'In Progress' %}
        <td style="background-color:yellow;">
        {% else %}
        <td>
        {% endif %}
            {{idea.status}} amp;nbsp;</td>
...
{% endfor %}
  

Моя страница по-прежнему отображается с текстом статуса в таблице, предполагая, что все if были выполнены с ошибкой, что привело бы к выполнению условия else, что дает <td>{{idea.status}} amp;nbsp;</td> отсутствие цвета ячейки, и подсказывает мне, что проблема заключается в самих моих операторах if.

Комментарии:

1. Синтаксис выглядит правильно. idea.status Значения могут не совпадать правильно (корпус, пробел). Выведите статус на странице для подтверждения (обязательно проверьте источник страницы).

2. Это должно быть связано с тем, что вы сказали. Я попробовал {% if idea.status != 'Not Started' %} и т.д., И ячейки стали красными, так что ошибка каким-то образом связана с оценкой оператора if.

Ответ №1:

Я нашел ответ, который сработал, и указывает, что он имеет какое-то отношение к форматированию строки, которое использует djnago. Я использовал фильтр slugify, который преобразует строки в определенный формат (нижний регистр, тире вместо пробелов), а затем изменил мои условия if, чтобы соответствовать этому формату, и это сработало.

 {% for idea in ideas_list %}
...
        <td>{{idea.priority}} amp;nbsp;</td>
        <td>{{idea.difficulty}} amp;nbsp;</td>
        {% if idea.status|slugify == 'not-started' %}
        <td style="background-color:red;">
        {% elif idea.status|slugify  == 'completed' %}
        <td style="background-color:green;">
        {% elif idea.status|slugify  == 'in-progress' %}
        <td style="background-color:yellow;">
        {% else %}
        <td>
        {% endif %}
            {{idea.status}} amp;nbsp;</td>
...
{% endfor %}
  

Вы можете увидеть, как django форматирует строки с помощью slugify здесь:
https://docs.djangoproject.com/en/1.10/ref/templates/builtins /

Ответ №2:

Ваша часть шаблона верна. Это правильный синтаксис:

 {% if idea.status == 'Not Started' %}
  

Данные регистрации

Самый простой способ отладить то, что у вас есть в журнале шаблонов, что у вас есть перед рендерингом шаблона. Вы можете использовать модуль ведения журнала Docs или простой:

 print(payload_for_rendering) 
  

Панель инструментов отладки Django

Установите основной инструмент отладки для каждого разработчика Django — Django Debug Toolbar install docs. Вы можете использовать модуль «Шаблон» на панели инструментов, чтобы увидеть данные, полученные вашим шаблоном, в удобном пользовательском интерфейсе. Вы можете проверить, отправляете ли вы правильные данные в визуализацию шаблона.