2016-07-28 60 views
6

我在python方面比较缺乏经验,所以当我读jinja API document at pocoo.org时我误入歧途。它读取:如何直接从文件系统加载jinja模板

配置Jinja2的加载模板应用程序最简单的方法看起来大致是这样的:
from jinja2 import Environment, PackageLoader 
env = Environment(loader=PackageLoader('yourapplication', 'templates')) 
这将创建一个默认设置的模板环境和查找模板在装载机 模板里面的 yourapplication python包。

事实证明,这并不是那么简单,因为您必须在其中创建/安装一个包含模板的python包,这会导致很多不必要的复杂性,尤其是如果您无意分发代码。您可以参考关于主题herehere的SO问题,但答案含糊不清。

很显然,一个天真的新手想要做的就是直接从文件系统加载模板,而不是作为包中的资源。 这是如何完成的?

回答

15

以下是的使用方法:使用FileSystemLoader代替PackageLoader。我在网上找到了例子herehere。比方说,你在同一个目录Python文件作为模板:

./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(outputText) 

事实证明,在Jinja2的API文档呢有一个section which discusses all the built-in loaders,所以它有点令人尴尬不注意到马上。但引言的措辞使得PackageLoader似乎是默认的“最简单”的方法。对于蟒蛇的新手来说,这可能会导致一场疯狂的追逐。

+10

有点可笑,你不能从一行文件中加载一个模板,例如'jinja2.load_template( 'template.html')' – Matt

相关问题