2016-07-28 57 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

相關問題