TemplateSyntaxError Не удалось разобрать остаток

У меня есть этот кусочек jinja2 в шаблоне Django:

{% 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 }} правильный. Что я упустил?

Язык шаблонов Django не допускает сложных выражений, поэтому {{ x * 100 }}, каким бы простым он ни казался, не оценивается Django.

Есть три основных варианта:

1. используйте тег шаблона

the {% widthratio … %} template tag [Django-doc] essentially implements the rule of three [wiki], although this is more designed for charts. It will divide by the second operand, and then multiply by the third and round the result, so:

{% widthratio df_usage 1 100 %}

делит на единицу (без эффекта) умножает на 100, а затем округляет результат.

2. Подготовьте результат в представлении

Вместо того чтобы выполнять арифметику в представлении, что также не очень эффективно, вы можете подготовить элементы в представлении с помощью:

totals_by_filesize = [
    (filesystem, total_quota, total_usage, 100 * df_usage)
    for (filesystem, total_quota, total_usage, df_usage) in totals_by_filesystem
]

3. используйте джинджу

Язык шаблонов Джанго не поддерживает несколько функций, это было сделано намеренно, чтобы помешать людям писать бизнес-логику в шаблонах. Можно использовать Jinja в качестве языка шаблонов, но это не обязательно и в некоторой степени контрпродуктивно, именно для того, чтобы предотвратить написание бизнес-логики в шаблоне.

Один из способов - добавить фильтр шаблона без необходимости его подготовки в представлении.

https://docs.djangoproject.com/en/5.0/howto/custom-template-tags/#how-to-create-custom-template-tags-and-filters

умножение в шаблоне django без использования созданного вручную тега шаблона

Вернуться на верх