如何将三个变量传递给自定义模板标签?

时间:2019-05-30 14:39:11

标签: django django-templates django-filter

我试图将3个变量传递给自定义过滤器,但我做不到。 Django中有这种可能性吗?

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

@register.filter
def pay_blago(cost, args):
    print(args.split(','))

2 个答案:

答案 0 :(得分:1)

如果您需要某个Item实例的函数,最简单的方法是在Item上定义一个属性。在模板中,说

{{item.cost_pay_blago}}

Item模型上

# this is needed by template foo/bar.html
@property
def cost_pay_blago( self):

    result = # some value based on self.cost, self.rest and self.can_pay_blago_to_currency
    return  result 

如果item不是模型实例,或者该函数将来自多个对象的数据汇总在一起,则可能在视图中对其进行计算,然后将其放入要针对其呈现模板的上下文中。

或者您可以使用Jinja模板引擎,但是如果它很小,那将是一个很大的锤子。

答案 1 :(得分:0)

Django仅允许使用一个参数。您可以将其作为列表/元组发送并在过滤器中拆分。

(wontfix标志)也有一张票 https://code.djangoproject.com/ticket/1199