有没有办法只使用内置过滤器在jinja2中执行basename
或dirname
?例如。类似的东西:
#!/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
有什么想法吗?
答案 0 :(得分:24)
如果你发现了这个问题& 使用Ansible ,然后这些过滤器do exist in Ansible。
获取文件路径的姓氏,例如'/etc/asdf/foo.txt'中的'foo.txt':
{{ path | basename }}
从路径获取目录:
{{ path | dirname }}
没有Ansible ,可以轻松地向Jinja2添加自定义过滤器:
def basename(path):
return os.path.basename(path)
def dirname(path):
return os.path.dirname(path)
通过在渲染模板之前更新环境中的过滤器字典,在模板环境中注册这些:
environment.filters['basename'] = basename
environment.filters['dirname'] = dirname
答案 1 :(得分:0)
似乎没有内置过滤器来获取物理基本路径。
http://jinja.pocoo.org/docs/templates/#list-of-builtin-filters
以下是传递当前物理路径的方法。
import os
tmpl = env.get_template('index.html')
return tmpl.render(folder=os.path.dirname(__file__))
希望这有帮助!