2011-12-14 19 views
10

Próbuję w szablonie dołączyć kolejną, która znajduje się w tym samym folderze. Aby to zrobić, robię tylko {% import 'header.jinja2' %}. Problem polega na tym, że ciągle otrzymuję błąd TemplateNotFound.Jak dołączyć szablon ze ścieżką względną w Jinja2

Mój folder szablon wygląda

+ myProject 
| 
+--+ templates 
    | 
    +--+ arby 
    | |-- header.jinja2 
    | |-- footer.jinja2 
    | +-- base.jinja2 
    | 
    +--+ bico 
     |-- header.jinja2 
     |-- footer.jinja2 
     +-- base.jinja2 

Więc kiedy czynią Arby za 'base.jinja2' Chciałbym, aby to 'Arby/header.jinja2' i kiedy czyni BICO za '' Chciałbym base.jinja2 lubię dołączyć "bico/header.jinja2". Chodzi o to, że nie chcę zapisywać przedrostka "arby /" lub "bico /" w {% include 'arby/base.jinja2'%}. czy to możliwe?

Dzięki

+0

Z tego co pliku są uruchomione 'import'? – Blender

+0

z 'arby/base.jinja2'. Chciałbym użyć {% importu "header.jinja2 '%} do włączenia' arby/header.jinja2 ' –

Odpowiedz

7

Istnieje wskazówka w jinja2.Environment.join_path() docstring o podklasy środowiska i zastąpienie metody join_path(), w celu wspierania import ścieżki w stosunku do prądu (to znaczy dominująca argument join_path) szablonu.

Oto przykład takiej klasy:

class RelEnvironment(jinja2.Environment): 
    """Override join_path() to enable relative template paths.""" 
    def join_path(self, template, parent): 
     return os.path.join(os.path.dirname(parent), template) 
+0

Ostrożnie - to nie działa w oknach z powodu problemów Jinja 411 i 412 - os.path.dirname i os. path.join użyje '' \\ '', który FilesystemLoader odrzuci. Upewnij się, że wynik jest oddzielony znakiem ''/''zamiast' os.path.sep'. –

Powiązane problemy