小编Jua*_*mas的帖子

如何直接从文件系统加载jinja模板

我对python缺乏经验,所以当我在pocoo.org上阅读jinja API文档时,我误入歧途.它写道:

配置Jinja2为应用程序加载模板的最简单方法大致如下:
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('yourapplication', 'templates'))
Run Code Online (Sandbox Code Playgroud)
这将创建一个具有默认设置的模板环境和一个在yourapplication python包中的templates文件夹中查找模板的加载器.

事实证明,这并不是那么简单,因为你必须在其中创建/安装包含模板的python包,这会带来许多不必要的复杂性,特别是如果你无意分发你的代码.您可以在此处此处参考有关此主题的SO问题,但答案含糊不清且不满意.

显然,天真的新手想要做的只是直接从文件系统加载模板,而不是作为包中的资源. 这是怎么做到的?

python templates jinja2

46
推荐指数
4
解决办法
4万
查看次数

需要打包python的jinja2模板

(更新:我做了一个更好的答案一个更好的问题在这里我要删除这个问题,但一些问题的答案可能被证明未来的搜索有用。)

我的问题与基本相同,但是答案很丑陋(要求包含dir结构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'))
Run Code Online (Sandbox Code Playgroud)

因此,这是我的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>")
Run Code Online (Sandbox Code Playgroud)

这是目录结构:

index.py
mypkg/
mypkg/template/index.html
mypkg/__init__.py  # empty …
Run Code Online (Sandbox Code Playgroud)

python templates module jinja2 setup.py

1
推荐指数
1
解决办法
2117
查看次数

标签 统计

jinja2 ×2

python ×2

templates ×2

module ×1

setup.py ×1