from django import template
register = template.Library()
@register.filter
def replace(value, cherche, remplacement):
return value.replace(cherche, remplacement)
{{ attr.name|replace:"_"," " }}
{{ attr.name|replace:"_" " " }}
{{ attr.name|replace:"_":" " }}
{{ attr.name|replace:"cherche='_', remplacement=' '" }}
发布于 2018-04-08 09:54:21
Django只允许你的过滤器有一个参数,但没有理由不能用逗号分隔所有参数到单个字符串中。
因此,例如,如果你想要一个过滤器来检查变量X是否在列表[1,2,3,4]中,你将需要一个如下所示的模板过滤器:
{% if X|is_in:"1,2,3,4" %}
现在我们可以像这样创建你的模板标签:
from django.template import Library
register = 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_list
register.filter(is_in)
创建arg_list的行是一个生成器表达式,它将所有逗号上的args字符串分开,并调用.strip()以删除任何前导和尾随空格。
例如,如果第三个参数是一个int,那么就这样做:
arg_list[2] = int(arg_list[2])
或者,如果他们都是ints做:
arg_list = [int(arg) for arg in args.split(',')]
编辑:现在通过使用键值对作为参数来具体回答你的问题,你可以使用Django使用的相同类来解析URL中的查询字符串,然后根据你的settings.py正确地处理字符编码。 。
因此,与查询字符串一样,每个参数都用'&'分隔:
{{ attr.name|replace:"cherche=_&remplacement= " }}
那么你的替换函数现在看起来像这样:
from django import template
from django.http import QueryDict
register = template.Library()
@register.filter
def 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',''))
发布于 2018-04-08 10:32:02
自定义过滤器只是带有一个或两个参数的Python函数:
https://stackoverflow.com/questions/-100003807
复制相似问题