Django中使用MathFilters执行复合数学运算报错,求解决方法
问题解决思路
你的解析错误来自两个核心问题:
- Django模板语法不支持用括号分组过滤器操作,括号会被识别为无效字符
sub、mul并非Django内置模板过滤器,默认无法直接调用
方案一:视图层计算(推荐,符合Django最佳实践)
模板应专注于展示逻辑,复杂计算放到视图中处理:
在视图代码中,给每个journal对象添加计算好的pnl字段:
# 视图示例代码 for journal in journals: if journal.trade_direction == 'Long - Buy': journal.pnl = (journal.exit_price - journal.entry_price) * journal.size else: journal.pnl = (journal.entry_price - journal.exit_price) * journal.size
模板中直接调用已计算好的字段:
<p class="pnl"> {{ journals.pnl }} </p>
方案二:自定义模板过滤器(适合必须在模板处理的场景)
1. 创建自定义过滤器文件
在你的Django应用下创建templatetags/custom_filters.py文件:
from django import template register = template.Library() @register.filter(name='subtract') def subtract(value, arg): try: return float(value) - float(arg) except (ValueError, TypeError): return 0 @register.filter(name='multiply') def multiply(value, arg): try: return float(value) * float(arg) except (ValueError, TypeError): return 0
2. 修改模板代码
加载自定义过滤器,并且去掉括号,用链式过滤器调用:
{% load custom_filters %} <p class="pnl"> {% if journals.trade_direction == 'Long - Buy' %} {{ journals.exit_price|subtract:journals.entry_price|multiply:journals.size }} {% else %} {{ journals.entry_price|subtract:journals.exit_price|multiply:journals.size }} {% endif %} </p>
内容的提问来源于stack exchange,提问作者Mt Khalifa
相关产品推荐
相关产品推荐

