Python Django模板:使用筛选器结果作为第二个筛选器的参数

Python Django模板:使用筛选器结果作为第二个筛选器的参数,python,django,django-template-filters,Python,Django,Django Template Filters,我想实现的是用Django模板进行计算,用简单的数学计算,即: section_angle = base_angle + ( sections_length / current_iteration_counter_over_sections) 当尝试在Django模板中翻译时,我认为可能是这样的: {% for section in sections %} {% with base_angle|add:sections|length|divides:forloop.counter0 a

我想实现的是用Django模板进行计算,用简单的数学计算,即:

section_angle = base_angle + ( sections_length / current_iteration_counter_over_sections)
当尝试在Django模板中翻译时,我认为可能是这样的:

{% for section in sections %}
    {% with base_angle|add:sections|length|divides:forloop.counter0 as section_angle %}
带有一个自定义过滤器,看起来像

def divides(value, param):
    return float(param)/float(value)
我有点困惑如何安排它,过滤器的顺序和我应该使用的参数。对于此处显示的示例,它会导致一个错误:呈现时捕获ValueError:无法将字符串转换为浮点:


附加问题:我试图添加括号来澄清,但模板引擎似乎不喜欢它。

不要这样做。Django模板系统不是放置这种逻辑的地方。 阅读Django官方网站上关于模板的内容:

如果你有编程方面的背景,或者你已经习惯了 将编程代码直接混合到HTML中的语言 要记住,Django模板系统不仅仅是Python 嵌入到HTML中。这是出于设计:模板系统旨在 表示,而不是程序逻辑


我认为Timmy的评论是正确的,将整个逻辑放在一个自定义过滤器中。

不应该
sections|length
sections|length
?虽然您可能能够实现这一点,但为了保持可读性,我会创建一个templatetag来实现同样的效果。为什么不创建一个template tag来完成整个计算呢?@J0HN在“数学”示例中称为sections_length以使其更清晰,但在代码中我必须使用长度filter@TimmyO马奥尼和卡提克:我想这是唯一合理的做法:)