Если условие в шаблоне django не достигло некоторых ветвей - PullRequest
0 голосов
/ 07 февраля 2019

Я унаследовал проект django 2.0 на работе и пытаюсь внести то, что должно быть простым изменением в условное в шаблонном html-файле, но не могу заставить его добраться до новой ветви.Я подозреваю синтаксическую проблему, но не могу ее найти.

У меня есть несколько строк, некоторые из которых отклонены, некоторые в ожидании одобрения, некоторые приняты.Этот код предназначен для отображения их соответствующим образом:

<td class="vert-align blue-madison block">
    {% if row.is_rejected %}
        <span class="label label-sm label-danger">
            Rejected
        </span>
    {% elif not row.is_active %}
        <span class="label label-sm label-warning">
            Pending review
        </span>
    {% elif row.id|row_is_pending_deletion %}
        <span class="label label-sm label-danger">
            Pending deletion
        </span>
    {% else %}
        <span class="label label-sm label-success">
            Active
        </span>
    {% endif %}
</td>

четыре ветви;Отклонено, Ожидает проверки, Ожидает удаления и Активен.
Активно и Ожидает проверки работают нормально.Я не проверял в ожидании удаления.Отклонено - это новая ветка, и я не могу заставить ее отображаться так, как показано выше.

Я знаю, что самая последняя строка отклонена True, поскольку я проверил ее в оболочке django

>>> row.is_rejected
True

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

Если я изменю приведенный выше код на «{%, если не row.is_rejected%}», то все строки отображаются как отклоненные с соответствующей красной меткой,так что общий синтаксис выглядит нормально.

Я проверил dbshell для строки, и он показывает is_rejected значение "t", возможно ли, что код выше не распознает "t" как True?Я попытался протестировать и row.is_rejected == t, и "t". В первом случае все строки возвращались отклоненными, а в последующем я получаю тот же результат, что и мой обычный код выше.

1 Ответ

0 голосов
/ 07 февраля 2019

Благодаря комментарию Райделя Миранды, приведенному выше, мне удалось найти проблему.На самом деле шаблон не ссылался ни на БД, ни на объект python, соответствующий рассматриваемой строке.Вместо этого views.py передавал словарь строк, который содержал частичные данные для строки, извлеченной из объекта python (в частности, полей id и is_active. Я изменил это, добавив поле is_rejected, и теперь все работает.

Моя вера в детерминистическую природу вселенной восстановлена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...