来自内置过滤器的jinja2 basename或dirname?

时间:2014-03-21 15:30:35

标签: python-2.7 jinja2

有没有办法只使用内置过滤器在jinja2中执行basenamedirname?例如。类似的东西:

#!/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

有什么想法吗?

2 个答案:

答案 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__))

希望这有帮助!