gpt4 book ai didi

python - 需要为python打包jinja2模板

转载 作者:行者123 更新时间:2023-12-04 00:06:58 25 4
gpt4 key购买 nike

(更新:我用更好的答案提出了一个更好的问题 here。我打算删除这个问题,但其中一些答案可能对 future 的搜索者有用。)

我的问题与 this 几乎相同,但该答案很丑陋(需要包含 sharedtemplates/templates/templates/ 的目录结构),发布时不完整(用户“回答”了他自己的问题),并假设我没有一些知识。

我正在开发我的第一个 python 支持的 Web 应用程序。 javascript 组件正在使用静态 HTML 页面进行开发。现在我想要一个服务器端 python 组件来处理 AJAX 调用并使用 jinja2 呈现 HTML 模板。

我之前在 python 上取得过成功,使用 tkinter/requests 创建 GUI 应用程序。喜欢这种语言,但 python 环境(环境?)令人困惑。我不在 virtualenv 工作.

根据jinja2 docs , HTML 模板必须在一个叫做包的东西中。然后你创建一个 EnvironmentPackageLoader知道包的名称和模板目录:

from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('yourapplication', 'templates'))

所以,这是我的 index.py (它只是一个 stub ,甚至不尝试渲染任何东西,但你至少可以判断它是否崩溃)。
#!/usr/bin/python
from jinja2 import Environment, PackageLoader # no prob, jinja2 correctly installed using pip

env = Environment(loader=PackageLoader('mypkg', 'template')) # causes server error

# if it doesn't crash, just put up a basic html page for now
print ("Content-type: text/html\r\n\r\n")
print("<html><head><title>hello</title></head><body>hello wuld</body></html>")

这是目录结构:
index.py
mypkg/
mypkg/template/index.html
mypkg/__init__.py # empty

错误日志中的相关行:
ImportError: No module named mypkg

也许我需要以不同的方式构造它,我很确定我需要创建和调用 setup.py安装模块。这是其他答案遗漏的部分内容: setup.py 中的内容在这种情况下它是如何工作的?我在 setup.py 上查看了几十个资源而且它们似乎都与安装 HTML 模板的问题无关。

在此先感谢您的帮助!

更新:fragilewindows 指向了一个关于“开发者模式”的资源,这可能是答案的一部分。这里的困难是,我希望将此模板打包用于本地部署,而不是用于分发。但是 99% 的在线文档都是关于为 PyPi 打包项目的。我不需要打包“项目”,只需一个极小的 HTML 模板。事实上,我需要打包模板的唯一原因是因为这是 jinja2 的默认方式。访问模板(我确实想在 python 中使用 native )。

我只需要说服环境安装了“mypkg”,并且"template"是安装中的目录。你可以看到我迄今为止的努力是幼稚的;我希望正确的答案会相应地轻量级。

最佳答案

我发现了一种解决方法,here .在这种用法中,模板不是模块或包的一部分;它直接从文件系统加载。文件系统:

./index.py
./template.html

索引.py:
#!/usr/bin/python
import jinja2

templateLoader = jinja2.FileSystemLoader( searchpath="." )
templateEnv = jinja2.Environment( loader=templateLoader )
TEMPLATE_FILE = "template.html"
template = templateEnv.get_template( TEMPLATE_FILE )
outputText = template.render( ) # this is where to put args to the template renderer

print ("Content-type: text/html\r\n\r\n")
print(outputText)

关于python - 需要为python打包jinja2模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38617900/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com