Django模板TemplateSyntaxError:无法解析'df_usage * 100'剩余部分
Django模板中TemplateSyntaxError问题排查
问题场景
我在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模板语法和Jinja2存在差异,Django模板不支持在变量表达式中直接使用乘法运算符进行计算,你混淆了两种模板引擎的语法规则,这才导致了这个解析错误。
你可以通过以下两种方式解决:
- 提前在视图层计算:在传递模板上下文前,先计算好百分比值(比如
percentage_usage = df_usage * 100),然后将计算后的变量传入模板,直接在模板中使用{{ percentage_usage }}即可。 - 使用Django内置模板标签:用
widthratio标签来完成计算,写法为{% widthratio df_usage 1 100 %},该标签的计算逻辑是(分子 / 分母) * 比例值,这里正好对应(df_usage / 1) * 100的需求。
另外注意模板中的一个小问题:第一个<td>标签里多余了一个</span>闭合标签,没有对应的起始<span>,建议修正以保证HTML结构正确。
内容的提问来源于stack exchange,提问作者Red Cricket
相关产品推荐
相关产品推荐

