Django - 具有多个参数的过滤器
Posted
技术标签:
【中文标题】Django - 具有多个参数的过滤器【英文标题】:Django - filter with multiple para 【发布时间】:2018-04-11 22:06:15 【问题描述】:我正在尝试创建具有多个参数的过滤器。我发现this link的第一个答案很有用,所以采纳了他的想法。
但是,我不知道如何创建一个包含所有值的字符串变量。这是我的代码:
% with amount_comments|to_string+","+limit_amount_comments|to_string as args %
% if page_nr|page_not_over_amount:args %
<a href="% url 'post:detail' topic.id page_nr|increase:1 %">Next Page</a>
% endif %
% endwith %
这是 to_string 过滤器:
@register.filter(name='to_string')
def to_string(value):
return str(value)
然后使用该参数的 page_not_over_amount 过滤器:
@register.filter(name='page_not_over_amount')
def page_not_over_amount(page_nr, args):
if args is None:
return False
else:
arg_list = [arg.strip() for arg in args.split(',')]
comment_amount = arg_list[0]
comment_limit = arg_list[1]
if page_nr*comment_limit < comment_amount-comment_limit:
return True
else:
return False
但我得到了这个例外:
Could not parse some characters: amount_comments|to_string|+","+limit_amount_comments||to_string
提前致谢!
【问题讨论】:
【参考方案1】:我认为更好的方法是编写自定义标签。尽管如此,您可以使用 add 过滤器 来创建一个可以使用with
标签引用为args
的字符串值。
% with amount_comments|to_string|add:','|add:limit_amount_comments|to_string as args %
...
% endwith %
奖励:
清理page_not_over_amount
@register.filter(name='page_not_over_amount')
def page_not_over_amount(page_nr, args):
if args is None:
return False
arg_list = list(map(int, args.split(',')))
comment_amount, comment_limit = arg_list
return page_nr * comment_limit < comment_amount - comment_limit
使用自定义分配标签
将标识函数assign_tuple
定义为simple custom assignment tag。
此函数带有传递给它的返回参数。你可以走得更远。
@register.assignment_tag
def assign_tuple(*args):
return args
@register.filter(name='page_not_over_amount')
def page_not_over_amount(page_nr, args):
if args is not None:
comment_amount, comment_limit = args
if page_nr * comment_limit < comment_amount - comment_limit:
return True
return False
在你的模板中使用这个标签,像这样:
% assign_tuple 2 3 as rarg %
1|page_not_over_amount:rarg
【讨论】:
你能告诉我如何在if标签中使用标签吗? 我不确定是否可以使用内置模板标签将标签与 if 标签一起使用。但是,在 if 标记中嵌套其他标记是可以实现的。 所以只写 % if custom_tag 'somevalues' %%endif%? 哦。我只是想明白你在问什么。我稍后会用如何制作自定义标签来更新我的答案。以上是关于Django - 具有多个参数的过滤器的主要内容,如果未能解决你的问题,请参考以下文章