在诗歌项目中包含模板文件
Include template files in poetry project
我有一个使用诗歌的命令行 python 应用程序,我想附带几个 jinja2 模板文件。据我所知,我将它们放在 template
目录中。我将如何使用应用程序发送这些模板,以及如何确保应用程序知道模板所在的位置?
这是我(天真的)尝试使用 pkgutil 来完成此任务:
目录结构:
.
├── app.py
├── LICENSE
├── poetry.lock
├── pyproject.toml
└── templates
└── message.en_US.jinja2
app.py:
import pkgutil
from jinja2 import Environment, FileSystemLoader
data = pkgutil.get_data(__name__, "templates")
env = Environment(loader=FileSystemLoader(data))
template = env.get_template("message.en_US.jinja2")
print(template.render({"foo": 1, "bar": 2}))
pyproject.toml:
[tool.poetry]
name = "app"
version = "0.1.0"
description = "Does stuff"
authors = ["Foo Bar <foo@bar.com>"]
license = "AGPL-3.0-or-later"
[tool.poetry.dependencies]
python = "^3.8"
jinja2 = "^2.11.3"
[tool.poetry.scripts]
app = "app:main"
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
此操作失败,因为未打包模板文件夹。我也不知道我是否可以像这样将文件夹传递给 Environment
构造函数。
在 Jinja 的上下文中,这可以使用 PackageLoader
轻松完成,它能够直接从 Python 导入包加载资源。
当然还要确保资源文件(模板文件)正确“打包”:这些文件应该是导入包的一部分。对于 poetry,请确保 pyproject.toml
中的 include
and packages
字段具有正确的值。
我有一个使用诗歌的命令行 python 应用程序,我想附带几个 jinja2 模板文件。据我所知,我将它们放在 template
目录中。我将如何使用应用程序发送这些模板,以及如何确保应用程序知道模板所在的位置?
这是我(天真的)尝试使用 pkgutil 来完成此任务:
目录结构:
.
├── app.py
├── LICENSE
├── poetry.lock
├── pyproject.toml
└── templates
└── message.en_US.jinja2
app.py:
import pkgutil
from jinja2 import Environment, FileSystemLoader
data = pkgutil.get_data(__name__, "templates")
env = Environment(loader=FileSystemLoader(data))
template = env.get_template("message.en_US.jinja2")
print(template.render({"foo": 1, "bar": 2}))
pyproject.toml:
[tool.poetry]
name = "app"
version = "0.1.0"
description = "Does stuff"
authors = ["Foo Bar <foo@bar.com>"]
license = "AGPL-3.0-or-later"
[tool.poetry.dependencies]
python = "^3.8"
jinja2 = "^2.11.3"
[tool.poetry.scripts]
app = "app:main"
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
此操作失败,因为未打包模板文件夹。我也不知道我是否可以像这样将文件夹传递给 Environment
构造函数。
在 Jinja 的上下文中,这可以使用 PackageLoader
轻松完成,它能够直接从 Python 导入包加载资源。
当然还要确保资源文件(模板文件)正确“打包”:这些文件应该是导入包的一部分。对于 poetry,请确保 pyproject.toml
中的 include
and packages
字段具有正确的值。