Django - сравнение условия if в шаблоне по типу данных

В части {% if %} я хочу сравнить число в строковой форме с другим. Я попробовал фильтр slice, но он не работает. Мне нужно сравнить строку, потому что я предполагаю, что все числа, переданные в шаблон, интерпретируются как строки в django, и нет возможности преобразовать строку в число в шаблоне.

Я получаю информацию о разделе и отправляю ее в шаблон в файле <table>. Если процент использования раздела выше 90%, процент должен быть красным.

Поскольку в машине более одного раздела, поэтому условный стиль строк независимый, поэтому лучше решать при рендеринге, а не в представлении.

Процент задается целым числом (89), а не десятичным числом (0.7). Если это десятичное число, я могу использовать {% if '0.9' in value %}, но это не так.

У меня такой шаблон: (от part.0 до part.4 другие данные о разделах)

<tbody>
    {% for part in partitions %}
    <tr>
        <td>{{part.0}}</td> <td>{{part.1}}</td> <td>{{part.2}} GB </td> <td>{{part.3}} GB </td> <td>{{part.4}} GB </td> 
        {% if part.5|slice:"0:1" == "8" or part.5|slice:"0:1" == "9" %}
        <td><font color="red">{{part.5}}%</font></td>
        {% else %}
        <td>{{part.5}}%</td>
        {% endif %}
    </tr>
    {% endfor %}
</tbody>

---------------------- РЕДАКТИРОВАТЬ 1 --------------------------- --

part — это список данных, полученных от psutil.disk_partitions('some_partition') и psutil.disk_usage("some_mountpoint"), с добавлением sdiskpart.device, sdiskpart,mountpoint, sdickusage.total, sdiskusage.free, sdiskusage.free, sdiskusage.percent. Это похоже на:

['/dev/sda1', '/boot',  'xxxxxxxxx', 'xxxxxxxxx', 'xxxxxxx', '20.9']

---------------------- РЕДАКТИРОВАТЬ 1 --------------------------- --

Теперь он не жалуется, но и не краснеет, когда данные соответствуют условию.

Что я могу сделать для достижения своей цели?

PS:

В документации я вижу такую ​​фразу:

Фильтры Вы также можете использовать фильтры в выражении if. Например:

{% if messages|length >= 100 %}
    You have lots of messages today!
{% endif %}

Но в нем не упоминаются другие фильтры, которые принимаются. Итак, разрешены ли такие фильтры, как slice, или другие вещи? Кажется, нет.

Я видел другие сообщения об использовании фильтров в шаблоне, но они не упоминают об использовании в if, но похожи на {{ str.slice }}.


person WesternGun    schedule 25.10.2017    source источник
comment
Нарезка в шаблонах работает так же, как и в Python; срез 0:1 дает список, он никогда не может равняться целому числу.   -  person Daniel Roseman    schedule 25.10.2017
comment
Но, это дает список? Сомневаюсь.... >>> '18.9'[0:1] '1'.   -  person WesternGun    schedule 25.10.2017
comment
Я имею в виду, я хочу разрезать строку.   -  person WesternGun    schedule 25.10.2017
comment
Можете показать, как на самом деле выглядит part?   -  person Daniel Roseman    schedule 25.10.2017
comment
пожалуйста, сообщите нам, что вы хотите сделать, чтобы мы могли дать вам другие методы   -  person mohammedgqudah    schedule 25.10.2017
comment
ОК, OP отредактировано с редактированием 1. Спасибо за все   -  person WesternGun    schedule 25.10.2017
comment
Если последний элемент 20.9 имеет тип int, интерпретирует ли шаблон django его как строку? Если нет, то могу сравнить с 90.   -  person WesternGun    schedule 25.10.2017


Ответы (1)


Что ж, я нашел ответ.

Если я передам (float) '90.7' в список, шаблон Django сможет сравнить его с 90. Удивительно. Прежде чем я передал его как строку.

Итак, список должен быть таким:

['/dev/sda1', '/boot',  'xxxxxxxxx', 'xxxxxxxxx', 'xxxxxxx', 20.9] 
# last element is a float

И такое сравнение стоит в шаблоне:

{% if part.5 > 90.0 %}
...
{% endif %}
person WesternGun    schedule 25.10.2017