带有多个参数的 Django 模板标签过滤器

Posted

技术标签:

【中文标题】带有多个参数的 Django 模板标签过滤器【英文标题】:Django template tags filter with multiple arguments 【发布时间】:2019-07-30 00:34:31 【问题描述】:

@register.filter
def customTag(value, first, second):
...
return result

模板

 valor|customTag:first|customTag:second 

错误

customTag 需要 3 个参数,提供 2 个

【问题讨论】:

......问题是......? 错误 customTag 需要 3 个参数,提供 2 个 【参考方案1】:

我认为只传递整个 customTag 而不是参数可能会解决问题。也许还有其他可能的解决方案。

@register.filter("filter_of_custom_tag")
def customTag(custom_tag_instance):
... 
return result

在你的模板中

 customTag|filter_of_custom_tag

【讨论】:

我需要更多参数 @marcelo.delta 我发现了一篇关于类似问题link 的*** 帖子。你能检查一下,这能解决你的问题吗?【参考方案2】:

您不能将多个参数传递给过滤器 (reference)。相反,您可以这样做:

@register.filter
def customTag(value, args):
   first, second = args.split(',')
   ...
   return value

 valor|customTag:"first,second"  // pass comma separated arguments in string

【讨论】:

【参考方案3】:

我也有这个疑问。 我在 django 模板中使用 % with as % 得到了很好的结果,但我需要创建两个过滤器模板标签:

模板标签:

@register.filter
def customTag(value, first):
...
return result1

@register.filter
def customTag2(first, second):
...
return result2

模板html

% with value|custom_tag:first as r1%
    % with r1|custom_tag2:second as r2 %
        use your r2 value:  r2 
    % endwith %
% endwith %

【讨论】:

以上是关于带有多个参数的 Django 模板标签过滤器的主要内容,如果未能解决你的问题,请参考以下文章

如何将三个或多个参数传递给自定义模板标签过滤器 django?

国庆第十天,Django标签和过滤器

Django - 来自模板标签内变量的字符串

django 第五课自定义模板过滤器与标签

Django 内置模板标签和过滤器

在 Django 模板中使用带有 blocktrans 的 urlize 过滤器的惯用方式