我的 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 }}
是正确的。 我在这里缺少什么?
错误消息误导了你。问题不是
df_usage * 100
的语法。Django 的模板语言将
{% ... %}
解释为模板标签,而
{{ ... }}
解释为变量。在
df_usage * 100
中,你正在使用
{{
和
}}
来包围一个表达式,但 Django 期望在
{{
和
}}
之间找到一个变量或可求值的表达式,而不是模板标签。
你有两种选择来解决这个问题:
选项 1:使用 Django 的
widthratio
模板标签
Django 有一个内置的模板标签
widthratio
可以用于计算百分比,而无需进行显式乘法。以下是如何使用它的方法:
{% for filesystem, total_quota, total_usage, df_usage in totals_by_filesystem %}
<tr>
<td>{{ filesystem }}</td>
<td>{{ total_quota | filesizeformat }}</td>
<td>{{ total_usage | filesizeformat }}</td>
<td>{{ df_usage|widthratio:100|floatformat }}%</td>
</tr>
{% endfor %}
在这个代码中:
-
{{ df_usage|widthratio:100 }}
计算df_usage
与 100 的比率。 -
|floatformat
过滤器用于将比率格式化为浮点数,以防它不是。 -
我们在末尾添加一个
%
符号以显示百分比。
选项 2:在 Python 代码中执行计算
你可以在将数据传递到模板之前在 Python 代码中计算百分比。这将使你的模板更简洁,并能分离逻辑和表示。以下是如何操作:
-
在你的视图中:
```python for item in totals_by_filesystem: item['percentage_usage'] = item['df_usage'] * 100
context = {'totals_by_filesystem': totals_by_filesystem, ...} return render(request, 'your_template.html', context) ```
-
在你的模板中:
html {% for filesystem, total_quota, total_usage, percentage_usage in totals_by_filesystem %} <tr> <td>{{ filesystem }}</td> <td>{{ total_quota | filesizeformat }}</td> <td>{{ total_usage | filesizeformat }}</td> <td>{{ percentage_usage|floatformat }}%</td> </tr> {% endfor %}
这种方法将
df_usage
乘以 100,并将结果存储在一个新的字典项
percentage_usage
中。然后,你在模板中使用此新变量,而无需进行任何额外的计算。