django - 如何将多个值传递给模板标签

Posted

技术标签:

【中文标题】django - 如何将多个值传递给模板标签【英文标题】:django - how to pass multiple values to a templatetag 【发布时间】:2016-02-15 12:29:20 【问题描述】:

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

@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 属性的对象,那就太麻烦了,所以我希望有一个适当的解决方案来解决这个问题。

【问题讨论】:

***.com/questions/420703/…的可能重复 【参考方案1】:

不清楚你想做什么。在您的函数中,我没有看到 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 是第二个参数。

要传递多个参数,您可以参考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

【讨论】:

谢谢。您的上述解决方案有效。我还发现了用于此目的的“简单标签”,我没有使用过滤器,而是使用了它,这也有效。

以上是关于django - 如何将多个值传递给模板标签的主要内容,如果未能解决你的问题,请参考以下文章

如何在 django 的基于类的视图中将值传递给模板?

如何将javascript变量传递给django模板标签

将模板中的值传递给 Django 中的视图

如何将 javascript 函数的值传递给 Django 视图?

Django将多个模型传递给模板

将模板中的按钮中的 id 传递给 Django 视图