比如,我们在模板语言jinja2里不只是字符串替换,需要对字符串做进一步的特殊处理,这事就需要用到filter
函数了。
简单来说,filter
函数就是类似linux管道一样,进来一个字符串,出去处理好的字符串。如下面的例子,这个左对齐的函数,当宽度不足时会在右侧补空格。
def left_align(s, l=20):
return s.ljust(l, ' ')
又如,对verilog端口类型input
、output
、inout
作缩写。原则就是return处理好的字符串。
def dir_short(s):
if s == 'input':
return 'i'
elif s == 'output':
return 'o'
elif s == 'inout':
return 'io'
自定义的filter
函数需要注册到jinji2里才能够识别出来。
env = jinja2.Environment()
env.filters['left_align'] = left_align
env.filters['dir_simple'] = dir_simple
注册之后,在jinja2模板里就可以使用了:
{{ port.name | left_align(20) }}
{{ port.direction | dir_short }}