django - 如何将多个值传递给templatetag

时间:2015-11-13 20:09:34

标签: django templatetag

我正在尝试将多个参数传递给我的模板标记:

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

模板:

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

这种方法不起作用。 任何想法如何做到这一点? 请注意,如果我必须将x数字转换为具有值和min_val属性的对象,那将太麻烦,所以我希望有一个适当的解决方案来解决这个问题。

1 个答案:

答案 0 :(得分: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是dict,'var'是我想要访问的密钥。在keyvalue过滤器标签中,weekday_dict是第一个参数dict,var是第二个参数。

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

简而言之,您无法在过滤器标记中轻松传递多个参数。您可以将其作为逗号分隔值传递,或使用多个过滤器传递它们,这些过滤器由link处的答案之一给出

@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 %}

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