Не могу загрузить шаблоны с jinja2 - PullRequest
1 голос
/ 23 июня 2019

У меня есть следующий проект,

APP
|-static
  |-templates
    |-file.html
|-blueprints
  |-blueprint1.py
  |-blueprint2.py
|-app.py

В каждом файле проекта есть различные sanic маршруты, которые я хочу отображать при вызове шаблона.

Я пытался поместить следующее в каждый файл blueprint,

template_env = Environment(
    loader=PackageLoader('APP', 'static/templates'),
    autoescape=select_autoescape(['html', 'xml'])
)

только чтобы получить ошибку ModuleNotFoundError: No module named 'APP'

Замена APP на blueprints дает мне ошибку TypeError: expected str, bytes or os.PathLike object, not NoneType

Я также пытался использовать FileSystemLoader, как это,

template_loader = FileSystemLoader(searchpath="../static/templates")
template_env = Environment(loader=template_loader)

и загрузите нужный мне шаблон template = template_env.get_template('file.html')

Но я получаю template not found при посещении URL.

Непосредственно пытаясь отобразить мой шаблон,

with open('..static/templates/file.html') as file:
    template = Template(file.read())

снова приводит к ошибке file not found.

Как лучше всего использовать jinja шаблоны в моем приложении?

1 Ответ

0 голосов
/ 23 июня 2019

В этом я создал проект, в котором я рендерил значение в шаблон jinja, и он отлично работает, вы можете взглянуть на это, надеюсь, это будет полезно: это дерево проекта:

.
├── app.py
└── static
    └── templates
        └── template.html

2 directories, 2 files

вот это template.html:

<html>
<header><title>This is title</title></header>
<body>
  <p>{{ value }}!</p>
</body>
</html>

вот это app.py:

#!/usr/bin/python
import jinja2
import os
path=os.path.join(os.path.dirname(__file__),'./static/templates')
templateLoader = jinja2.FileSystemLoader(searchpath=path)
templateEnv = jinja2.Environment(loader=templateLoader)
TEMPLATE_FILE = "template.html"
hello="hello..... "
template = templateEnv.get_template(TEMPLATE_FILE)
outputText = template.render(value=hello)  # this is where to put args to the template renderer
print(outputText)

вывод:

<html>
<header><title>This is title</title></header>
<body>
</body>
</html>
@gh-laptop:~/jinja$ python app.py 
<html>
<header><title>This is title</title></header>
<body>
  <p>hello..... !</p>
</body>
</html>
...