You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向Django自定义模板过滤器传递三个变量?

Django自定义过滤器传递多参数的解决方案

当然支持传递多个参数到自定义过滤器啦!不过你当前的模板写法有问题,导致参数没有被正确解析,我来帮你搞定:

问题根源

你写的模板代码:

{{ item.cost|pay_blago:'{{item.can_pay_blago_to_currency}}, {{item.rest}}'}}

这里的{{item.can_pay_blago_to_currency}}和{{item.rest}}是被包裹在字符串引号里的,模板引擎不会解析它们,过滤器最终收到的是字面量字符串"{{item.can_pay_blago_to_currency}}, {{item.rest}}",而不是这两个变量的实际值,这就是为什么你的split(',')输出不符合预期。

方案一:直接传递多个参数(推荐)

Django支持直接给过滤器传递多个参数,只要你的过滤器函数定义对应数量的参数,模板里用冒号:依次分隔参数即可:

模板代码

{{ item.cost|pay_blago:item.can_pay_blago_to_currency:item.rest }}

过滤器函数

from django import template

register = template.Library()

@register.filter
def pay_blago(cost, can_pay_blago_to_currency, rest):
    # 现在你可以直接使用三个参数了
    print(f"成本: {cost}, 可支付币种: {can_pay_blago_to_currency}, 剩余金额: {rest}")
    # 在这里编写你的业务逻辑,最后返回处理后的结果
    return ...

方案二:拼接参数字符串后拆分(适用于参数较多的场景)

如果需要传递更多参数,或者需要动态拼接参数,可以先把多个变量拼成一个字符串,再传递给过滤器,最后在函数里拆分:

模板代码(用with标签拼接更清晰)

{% with args=f"{item.can_pay_blago_to_currency},{item.rest}" %}
    {{ item.cost|pay_blago:args }}
{% endwith %}

或者用add过滤器拼接(适合字符串类型参数):

{{ item.cost|pay_blago:item.can_pay_blago_to_currency|add:","|add:item.rest }}

过滤器函数

from django import template

register = template.Library()

@register.filter
def pay_blago(cost, args):
    # 拆分参数,注意去除可能的空格
    can_pay, rest = [arg.strip() for arg in args.split(',')]
    # 如果参数是数字类型,记得转换类型,比如:
    # can_pay = float(can_pay)
    # rest = int(rest)
    print(f"成本: {cost}, 可支付币种: {can_pay}, 剩余金额: {rest}")
    # 编写处理逻辑并返回结果
    return ...

两种方案都能解决你的问题,推荐用第一种,代码更直观易维护~

内容的提问来源于stack exchange,提问作者user11301070

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 07:48:31