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

надеюсь, что это помогает!