【发布时间】:2016-12-01 18:08:18
【问题描述】:
(更新:我用更好的答案提出了一个更好的问题here。我打算删除这个问题,但其中一些答案可能对未来的搜索者有用。)
我的问题与this 几乎相同,但该答案很丑陋(需要包含sharedtemplates/templates/templates/ 的目录结构),发布时不完整(用户“回答”了他自己的问题),并假设我不知道一些知识没有。
我正在开发我的第一个 python 支持的 Web 应用程序。 javascript 组件正在使用静态 HTML 页面进行开发。现在我想要一个服务器端 python 组件来处理 AJAX 调用并使用 jinja2 呈现 HTML 模板。
我之前在 python 上取得过成功,使用 tkinter/requests 创建 GUI 应用程序。喜欢这种语言,但 python 环境(环境?)令人困惑。我不在virtualenv 工作。
根据jinja2 docs,HTML 模板必须在一个叫做包的东西中。然后你创建一个Environment 和一个知道包名和模板目录的PackageLoader:
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('yourapplication', 'templates'))
所以,这是我的 index.py(它只是一个存根,甚至不会尝试渲染任何内容,但您至少可以判断它是否崩溃)。
#!/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 中使用本机)。
我只需要让环境相信“mypkg”已安装,并且“模板”是安装中的一个目录。你可以看到我迄今为止的努力是幼稚的;我希望正确的答案会相应地轻量级。
【问题讨论】:
标签: python templates module jinja2 setup.py