719*_*016 10 jinja2 python-2.7
有没有办法只使用内置过滤器进行basename或dirname在jinja2?例如:
#!/usr/bin/python
import jinja2
mybin = '/my/favorite/full/path/foo'
t = jinja2.Template("my binary is {{ mybin }}")
print t.render()
t = jinja2.Template("my basename is {{ mybin|basename() }}")
print t.render()
t = jinja2.Template("my dirname is {{ mybin|dirname() }}")
print t.render()
1
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
Ste*_* E. 31
如果您发现此问题并且正在使用Ansible,那么这些过滤器确实存在于Ansible中.
要获取文件路径的姓氏,例如'/etc/asdf/foo.txt'中的'foo.txt':
{{ path | basename }}
Run Code Online (Sandbox Code Playgroud)
要从路径获取目录:
{{ path | dirname }}
Run Code Online (Sandbox Code Playgroud)
如果没有Ansible,可以轻松地向Jinja2添加自定义过滤器:
def basename(path):
return os.path.basename(path)
def dirname(path):
return os.path.dirname(path)
Run Code Online (Sandbox Code Playgroud)
在渲染模板之前,通过更新环境中的过滤器字典,在模板环境中注册这些:
environment.filters['basename'] = basename
environment.filters['dirname'] = dirname
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10030 次 |
| 最近记录: |