django - 如何将多个值传递给模板标签
django - how to pass multiple values to a 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 属性的对象,那就太麻烦了,所以我希望这个问题有适当的解决方案。
不清楚您要做什么。在您的函数中,我没有看到 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 是第一个参数字典,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
我正在尝试将多个参数传递到我的模板标签:
@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 属性的对象,那就太麻烦了,所以我希望这个问题有适当的解决方案。
不清楚您要做什么。在您的函数中,我没有看到 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 是第一个参数字典,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