В моем шаблоне Django есть этот фрагмент jinja2:
{% for filesystem, total_quota, total_usage, df_usage in totals_by_filesystem %}
<tr>
<td>{{ filesystem }}</span></td>
<td>{{ total_quota | filesizeformat }}</td>
<td>{{ total_usage | filesizeformat }}</td>
<td>{{ df_usage * 100 }}</td>
</tr>
{% endfor %}
Когда я запускаю его, я получаю это сообщение об ошибке:
Exception Type: TemplateSyntaxError
Exception Value:
Could not parse the remainder: ' * 100' from 'df_usage * 100'
Я почти уверен, что мой синтаксис {{ df_usage * 100 }}
верен. Что мне здесь не хватает?
🤔 А знаете ли вы, что...
С Python можно создавать ботов для социальных сетей и мессенджеров.
Язык шаблонов Django не допускает сложных выражений, поэтому {{ x * 100 }}
, каким бы простым оно ни казалось, не оценивается Django.
По сути есть три варианта:
тег шаблона {% widthratio … %} [Django-doc] по сути реализует правило трёх [wiki], хотя он больше предназначен для диаграмм. Он разделит на второй операнд, а затем умножит на третий и округлит результат, так:
{% widthratio df_usage 1 100 %}
делится на единицу (без эффекта) умножается на 100 и затем округляет результат.
Вместо выполнения арифметических действий в представлении, что также не очень эффективно, вы можете подготовить элементы в представлении с помощью:
totals_by_filesize = [
(filesystem, total_quota, total_usage, 100 * df_usage)
for (filesystem, total_quota, total_usage, df_usage) in totals_by_filesystem
]
Язык шаблонов Django не поддерживает некоторые функции. Это сделано намеренно, чтобы люди не могли писать бизнес-логику в шаблонах. В качестве языка шаблонов можно использовать Jinja, но это не обязательно и в некоторой степени контрпродуктивно, именно для того, чтобы не допустить написания бизнес-логики в шаблоне.
Один из способов — добавить фильтр шаблона без необходимости его подготовки в представлении.
умножение в шаблоне django без использования тега шаблона, созданного вручную