В части {% 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 }}
.
0:1
дает список, он никогда не может равняться целому числу. - person Daniel Roseman   schedule 25.10.2017>>> '18.9'[0:1] '1'
. - person WesternGun   schedule 25.10.2017part
? - person Daniel Roseman   schedule 25.10.201720.9
имеет тип int, интерпретирует ли шаблон django его как строку? Если нет, то могу сравнить с90
. - person WesternGun   schedule 25.10.2017