bch*_*hun 81 django django-templates
from django import template
register = template.Library()
@register.filter
def replace(value, cherche, remplacement):
return value.replace(cherche, remplacement)
Run Code Online (Sandbox Code Playgroud)
{{ attr.name|replace:"_"," " }}
{{ attr.name|replace:"_" " " }}
{{ attr.name|replace:"_":" " }}
{{ attr.name|replace:"cherche='_', remplacement=' '" }}
Run Code Online (Sandbox Code Playgroud)
Van*_*ale 101
这是可能的,也很简单.
Django只允许你的过滤器使用一个参数,但没有理由不能使用逗号将所有参数放入单个字符串中以将它们分开.
因此,例如,如果您想要一个检查变量X是否在列表[1,2,3,4]中的过滤器,您将需要一个如下所示的模板过滤器:
{% if X|is_in:"1,2,3,4" %}
Run Code Online (Sandbox Code Playgroud)
现在我们可以像这样创建你的模板标签:
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)
Run Code Online (Sandbox Code Playgroud)
创建arg_list的行是一个生成器表达式,它在所有逗号上拆分args字符串并调用.strip()以删除任何前导和尾随空格.
例如,如果第三个参数是一个int,那么就这样做:
arg_list[2] = int(arg_list[2])
Run Code Online (Sandbox Code Playgroud)
或者如果所有这些都是整体的话:
arg_list = [int(arg) for arg in args.split(',')]
Run Code Online (Sandbox Code Playgroud)
编辑:现在通过使用键,值对作为参数来专门回答您的问题,您可以使用Django用于从URL中解析查询字符串的相同类,然后还可以根据您的settings.py正确处理字符编码. .
因此,与查询字符串一样,每个参数都以'&'分隔:
{{ attr.name|replace:"cherche=_&remplacement= " }}
Run Code Online (Sandbox Code Playgroud)
然后你的替换功能现在看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
你可以加快一些冒险,做一些不正确的替换:
qs = QueryDict(args)
return value.replace(qs.get('cherche',''), qs.get('remplacement',''))
Run Code Online (Sandbox Code Playgroud)
Saw*_*han 15
它比您想象的
要简单您可以为此使用simple_tag。
from django import template
register = template.Library()
@register.simple_tag
def multiple_args_tag(a, b, c, d):
#do your stuff
return
Run Code Online (Sandbox Code Playgroud)
在模板中:
{% multiple_args_tag 'arg1' 'arg2' 'arg3' 'arg4' %}
Run Code Online (Sandbox Code Playgroud)
注意:不要忘记重新运行服务器。
小智 12
这很容易.
@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 }}
Run Code Online (Sandbox Code Playgroud)
dra*_*oot 10
而不是过滤器,将您的标签注册为简单标签.那些可以采取多种论点.调用它的语法会有所不同,但这只是语法糖的变化.
归档时间: |
|
查看次数: |
76673 次 |
最近记录: |