2016-03-04 211 views
2

我無法讓Jinja2讀取我的模板文件。Jinja無法找到模板路徑

jinja2.exceptions.TemplateNotFound: template.html

配置Jinja2的加載模板供您 應用程序最簡單的方法看起來大致是這樣的:

從Jinja2的導入環境,PackageLoader ENV = 環境(裝載機= PackageLoader('yourapplication ','templates'))這個 將創建一個模板環境,其默認設置和一個 加載程序,該加載程序可在您的應用程序python包中的templates文件夾中查找模板。不同的裝載機可用,並且如果要從 數據庫或其他資源加載模板,則還可以編寫自己的裝載程序和 。

要加載從這種環境中的模板,你只需要調用 get_template()方法,然後返回加載的模板:

模板= env.get_template( 'mytemplate.html')

env = Environment(loader=FileSystemLoader('frontdesk', 'templates')) 
template = env.get_template('template.html') 

我的樹(我已經激活了VENV @frontdesk)

. 
├── classes.py 
├── labels.txt 
├── payments.py 
├── templates 
├── test.py 
└── venv 

回答

1

你是全光照g實現具有以下初始化參數的FileSystemLoader classfrontdesktemplates,基本上沒有太大的意義,因爲templates字符串將作爲encoding參數值傳遞:

class FileSystemLoader(BaseLoader): 
    def __init__(self, searchpath, encoding='utf-8', followlinks=False): 

您與2個參數進行初始化。如果您希望繼續使用FileSystemLoader作爲模板加載器,使用這種方式:

from jinja2 import Environment, FileSystemLoader 

env = Environment(loader=FileSystemLoader('frontdesk/templates')) 
template = env.get_template('index.html') 

或者,如果你想用的PackageLoader class

from jinja2 import Environment, PackageLoader 

env = Environment(loader=PackageLoader('frontdesk', 'templates')) 
template = env.get_template('index.html') 

在這種情況下,你需要確保frontdeskpackage - 換句話說,請確保您在frontdesk目錄中有__init__.py文件。

+0

另外,在PackageLoader類的例子中,''templates''是保存模板的目錄的相對路徑(相對於包'frontdesk')。 – mareoraft