jinja2 basename или dirname из встроенных фильтров?
есть ли способ сделать 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
какие идеи?
2 ответов
если вы нашли этот вопрос и использование Ansible, то эти фильтры существуют в Анзибль.
чтобы получить фамилию пути к файлу, например ' foo.txt 'out of' / etc/asdf / foo.txt’:
{{ path | basename }}
чтобы получить каталог из пути:
{{ path | dirname }}
Без Анзибль, легко добавить пользовательские фильтры в 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
Кажется, что нет встроенного фильтра для получения физического базового пути.
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__))
надеюсь, что это помогает!