Jua*_*mas 46 python templates jinja2
我对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问题,但答案含糊不清且不满意.
显然,天真的新手想要做的只是直接从文件系统加载模板,而不是作为包中的资源. 这是怎么做到的?
Jua*_*mas 71
方法如下:使用a FileSystemLoader而不是a PackageLoader.我在这里和这里找到了网络上的例子.假设您在模板的同一个目录中有一个python文件:
./index.py
./template.html
Run Code Online (Sandbox Code Playgroud)
这个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(outputText)
Run Code Online (Sandbox Code Playgroud)
事实证明,jinja2 API文档确实有一个讨论所有内置加载器的部分,所以不要立即注意到它是一种尴尬.但引言的措辞PackageLoader似乎是默认的,"最简单"的方法.对于蟒蛇的新手来说,这可能导致一场疯狂的追逐.
Cas*_*Cas 55
一种更简单的方法是直接调用jinj2.Template构造函数并使用open加载文件:
from jinja2 import Template
with open('template.html.jinja2') as file_:
template = Template(file_.read())
template.render(name='John')
Run Code Online (Sandbox Code Playgroud)
bca*_*oll 28
这是一个班轮:
template = Template(open('template_file.j2').read())
Run Code Online (Sandbox Code Playgroud)
然后您可以在另一行或在一行中渲染模板:
rendered = Template(open('template_file.j2').read()).render(var="TEXT")
Run Code Online (Sandbox Code Playgroud)
Sai*_*ish 12
如果使用 Python 3.4+ 和 Jinja2 - v2.11+ -- 我们可以结合 python 的 pathlib 和 Filesystem 来简化流程
from pathlib import Path
...
p = Path(__file__).parent.parent / 'templates' # sample relative path
env = Environment(
loader=FileSystemLoader(Path(p)))
template = env.get_template('your_file.jinja2')
Run Code Online (Sandbox Code Playgroud)
我Template(file)不习惯直接使用,因为 Jinja 的模板继承处理可能效果不佳。
Pathlib 支持仅在最新版本的 Jinja - v2.11+ 中添加
| 归档时间: |
|
| 查看次数: |
40368 次 |
| 最近记录: |