栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Django模板的自定义模板过滤器中添加多个参数?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Django模板的自定义模板过滤器中添加多个参数?

这是可能的并且相当简单。

Django只允许在过滤器中使用一个参数,但是没有理由不能使用逗号将所有参数都放在一个字符串中。

因此,例如,如果你需要一个过滤器来检查变量X是否在列表[1,2,3,4]中,则需要一个如下所示的模板过滤器:

{% if X|is_in:"1,2,3,4" %}

现在,我们可以像这样创建你的templatetag:

from django.template import Libraryregister = Library()def is_in(var, args):    if args is None:        return False    arg_list = [arg.strip() for arg in args.split(',')]    return var in arg_listregister.filter(is_in)

创建arg_list的行是一个生成器表达式,该表达式将所有逗号上的args字符串分割开并调用.strip()以删除任何前导和尾随空格。

例如,如果第三个参数是int,则只需执行以下操作:

arg_list[2] = int(arg_list[2])

或者如果它们都是整数,则执行以下操作:

arg_list = [int(arg) for arg in args.split(',')]

编辑:现在通过使用键,值对作为参数来专门回答你的问题,你可以使用Django用于解析URL之外的查询字符串的同一类,这也具有根据你的settings.py正确处理字符编码的好处。 。

因此,与查询字符串一样,每个参数都用’&’分隔:

{{ attr.name|replace:"cherche=_&remplacement= " }}

然后,你的替换函数将如下所示:

from django import templatefrom django.http import QueryDictregister = template.Library()@register.filterdef replace(value, args):    qs = QueryDict(args)    if qs.has_key('cherche') and qs.has_key('remplacement'):        return value.replace(qs['cherche'], qs['remplacement'])    else:        return value

你可能会加快速度,但有可能会进行一些错误的替换:

qs = QueryDict(args)return value.replace(qs.get('cherche',''), qs.get('remplacement',''))


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/398593.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号