HTML-шаблоны с использованием Jinja2 - Lost


8 принят

PackageLoaderожидает действительный модуль Python с использованием регулярного синтаксиса точек. Например, если ваша структура выглядит так:

myapp/
  __init__.py
  a€¦
  templates/
    mytemplate.html

Вы должны использовать его myappкак имя модуля.


9

Если вы не хотите или не нуждаетесь в пакете Python, скорее всего, вы должны использовать FileSystemLoader , например:

from jinja2 import Environment, FileSystemLoader, select_autoescape
env = Environment(
    loader=FileSystemLoader('file/path/'),
    autoescape=select_autoescape(['html', 'xml']),
)

Я решил эту проблему, используя следующий код:

 env = Environment(loader=PackageLoader('scriptname', 
                                        templatesPath))

где этот код находится в файле scriptname.py.

Я не уверен, что мой ответ уместен, но мне было интересно, что, возможно, кто-то может найти этот ответ полезным. Если я ошибаюсь, дайте мне знать.


2

Класс PackageLoader ( BaseLoader ) . «» "Загружать шаблоны из питона яйца или пакеты Он построен с именем пакета питона и путь к шаблонам в этом пакете :: Загрузчик = PackageLoader („MyPackage“,„вид“) Если путь пакета не указан, предполагается `` `templates```. По умолчанию кодировка шаблона -` `` utf-8```, которую можно изменить, установив параметр `encoding` на что-то еще. характер яиц можно только перезагрузить шаблоны, если пакет был загружен из файловой системы, а не zip-файл. "" " определяется следующим образом:

__init__()

И тогда метод выглядит следующим образом:def __init__(self, package_name, package_path='templates', encoding='utf-8'):

myapp/
  __init__.py
  ...
  templates/
    mytemplate.html

Это заставляет нас заметить, что такая структура выглядит следующим образом:

PackageLoader

Будет иметь тот же PackageLoaderэкземпляр с обоими этими объявлениями:

PackageLoader('myapp')
PackageLoader('myapp', 'templates')

Итак, если вы используете myapp/путь, вам просто нужно сказать:

PackageLoader('templates', '')

Так что это просто займет templates/путь. Если вы оставите второй аргумент пустым, он попытается найти шаблоны templates/templates.

Наконец, вы можете проверить, что было загружено с помощью list_templates()метода:

PackageLoader('templates', '').list_templates()
Python, HTML, шаблоны, jinja2,

python,html,templates,jinja2,

7

Ответов: 4


8 принят

PackageLoaderожидает действительный модуль Python с использованием регулярного синтаксиса точек. Например, если ваша структура выглядит так:

myapp/
  __init__.py
  a€¦
  templates/
    mytemplate.html

Вы должны использовать его myappкак имя модуля.


9

Если вы не хотите или не нуждаетесь в пакете Python, скорее всего, вы должны использовать FileSystemLoader , например:

from jinja2 import Environment, FileSystemLoader, select_autoescape
env = Environment(
    loader=FileSystemLoader('file/path/'),
    autoescape=select_autoescape(['html', 'xml']),
)

Я решил эту проблему, используя следующий код:

 env = Environment(loader=PackageLoader('scriptname', 
                                        templatesPath))

где этот код находится в файле scriptname.py.

Я не уверен, что мой ответ уместен, но мне было интересно, что, возможно, кто-то может найти этот ответ полезным. Если я ошибаюсь, дайте мне знать.


2

Класс PackageLoader ( BaseLoader ) . «» "Загружать шаблоны из питона яйца или пакеты Он построен с именем пакета питона и путь к шаблонам в этом пакете :: Загрузчик = PackageLoader („MyPackage“,„вид“) Если путь пакета не указан, предполагается `` `templates```. По умолчанию кодировка шаблона -` `` utf-8```, которую можно изменить, установив параметр `encoding` на что-то еще. характер яиц можно только перезагрузить шаблоны, если пакет был загружен из файловой системы, а не zip-файл. "" " определяется следующим образом:

__init__()

И тогда метод выглядит следующим образом:def __init__(self, package_name, package_path='templates', encoding='utf-8'):

myapp/
  __init__.py
  ...
  templates/
    mytemplate.html

Это заставляет нас заметить, что такая структура выглядит следующим образом:

PackageLoader

Будет иметь тот же PackageLoaderэкземпляр с обоими этими объявлениями:

PackageLoader('myapp')
PackageLoader('myapp', 'templates')

Итак, если вы используете myapp/путь, вам просто нужно сказать:

PackageLoader('templates', '')

Так что это просто займет templates/путь. Если вы оставите второй аргумент пустым, он попытается найти шаблоны templates/templates.

Наконец, вы можете проверить, что было загружено с помощью list_templates()метода:

PackageLoader('templates', '').list_templates()
Python, HTML, шаблоны, jinja2,
Похожие вопросы