2016-03-04 2 views
2

Я не могу заставить Jinja2 прочитать мой файл шаблона.Jinja не может найти путь к шаблону

jinja2.exceptions.TemplateNotFound: template.html

Самый простой способ настроить Jinja2 загрузить шаблоны для приложения выглядит примерно так:

от импорта окружающей среды jinja2, PackageLoader окр = по окружающей среде (погрузчиком = PackageLoader ('yourapplication ',' templates ')) Этот создаст среду шаблонов с настройками по умолчанию и загрузчиком , который ищет шаблоны в папке шаблонов внутри пакета python для yourapplication. , Доступны различные загрузчики и вы также можете написать свой собственный, если хотите загрузить шаблоны из базы данных или других ресурсов.

Чтобы загрузить шаблон из этой среды вы просто вызвать метод get_template(), который затем возвращает загруженный шаблон:

шаблон = env.get_template ('mytemplate.html')

env = Environment(loader=FileSystemLoader('frontdesk', 'templates')) 
template = env.get_template('template.html') 

Мое дерево (я активизирован venv @frontdesk)

. 
├── classes.py 
├── labels.txt 
├── payments.py 
├── templates 
├── test.py 
└── venv 

ответ

1

Вы нно г в FileSystemLoader class, который имеет следующие инициализации аргументы:

class FileSystemLoader(BaseLoader): 
    def __init__(self, searchpath, encoding='utf-8', followlinks=False): 

Вы его инициализации с 2-мя аргументами: frontdesk и templates, которые в принципе не имеет особого смысла, так как templates строка будет передана в качестве значения encoding аргумента. Если вы хотите продолжать использовать FileSystemLoader в качестве шаблона загрузчика, использовать его таким образом:

from jinja2 import Environment, FileSystemLoader 

env = Environment(loader=FileSystemLoader('frontdesk/templates')) 
template = env.get_template('index.html') 

Или, если вы имели в виду использовать PackageLoader class:

from jinja2 import Environment, PackageLoader 

env = Environment(loader=PackageLoader('frontdesk', 'templates')) 
template = env.get_template('index.html') 

В этом случае вам нужно убедитесь, что frontdesk - это package - другими словами, убедитесь, что у вас есть файл __init__.py внутри каталога frontdesk.

+0

Кроме того, в примере класса PackageLoader '' templates'' является относительным путем каталога, в котором хранятся шаблоны (относительно пакета 'frontdesk'). – mareoraft

Смежные вопросы