1

I am trying to pass multiple parameters to my template tag:

@register.filter
def val_color(val, min_val):
    if val >= min_val:
        return 'red'
    return 'black'

template:

{% for x in data.vals %}
    <font color="x|data.min_val|val_color">x</font>
{% endfor %}

this approach does not work. Any ideas how to do this? Note that it would be too messy if I have to convert x numbers into objects with a value and the min_val properties so I am hoping there is a proper solution for this issue.

4

1 回答 1

2

目前尚不清楚您要做什么。在您的功能中,我没有看到min_val.

但让我举个例子,过滤器是如何工作的。这是过滤器标签的示例

@register.filter
def keyvalue(dict, key):
    """Filter to fetch a dict's value by a variable as key"""
    return dict.get(key, '')

过滤标签的使用

{{ weekday_dict|keyvalue:var }}

这里 weekday_dict 是字典,'var'是我想要访问的关键。在键值过滤器标签中,weekday_dict 是第一个参数 dict,var 是第二个参数。

要传递多个参数,您可以参考链接

简而言之,您不能轻松地在过滤器标签中传递多个参数。您可以将其作为逗号分隔值传递,或者使用链接中的答案之一给出的多个过滤器传递它们

@register.filter(name='one_more')
def one_more(_1, _2):
    return _1, _2

def your_filter(_1_2, _3)
    _1, _2 = _1_2
    print "now you have three arguments, enjoy"

{{ _1|one_more:_2|your_filter:_3 }}

更新:正如我在您更新的问题中看到的那样。您不需要传递多个参数您的过滤器标签定义为:

@register.filter
def val_color(val, min_val):
    if val >= min_val:
        return 'red'
    return 'black'

要使用此标签,您可以将模板代码更新为

{% for x in data.vals %}
    <font color="{{ x|val_color:data.min_val }}">{{ x }}</font>
{% endfor %}

您还可以为第二个参数设置一些默认值,然后您不需要为默认情况传递最小值。也不要忘记在使用它们之前加载过滤器。有关标签的更多详细信息,请参阅链接

于 2015-11-13T20:28:31.253 回答