#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. Вы можете использовать модуль «Шаблон» на панели инструментов, чтобы увидеть данные, полученные вашим шаблоном, в удобном пользовательском интерфейсе. Вы можете проверить, отправляете ли вы правильные данные в визуализацию шаблона.