需要为python打包jinja2模板
作者:互联网
(更新:我用更好的答案here做了一个更好的问题.我打算删除这个问题,但是一些答案可能对未来的搜索者有用.)
我的问题与this完全相同,但答案是丑陋的(需要一个dir结构,包括sharedtemplates / templates / templates /),不完整的发布(用户“回答”他自己的问题),并假设我没有一些知识.
我正在研究我的第一个python支持的Web应用程序. javascript组件正在使用静态HTML页面进行开发.现在我想要一个服务器端python组件来处理AJAX调用并使用jinja2呈现HTML模板.
我之前使用python成功,使用tkinter / requests创建GUI应用程序.喜欢这种语言,但是python环境(环境?)令人困惑.我不是在使用virtualenv.
根据jinja2 docs,HTML模板必须在称为包的东西中.然后使用PackageLoader创建一个环境,该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”,并且“template”是安装中的目录.你可以看到我到目前为止的努力是天真的;我希望正确的答案会相应轻量级.
解决方法:
我发现了一个替代方法,here.在这种用法中,模板不是模块或包的一部分;它直接从文件系统加载.文件系统:
./index.py
./template.html
index.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)
标签:setup-py,python,templates,jinja2,module 来源: https://codeday.me/bug/20191003/1847347.html