2014-01-08 69 views
0

我有一個Flask應用程序使用藍圖,我想改變藍圖搜索模板的目錄。燒瓶template_folder參數沒有被使用

我創建了一個藍圖如下:

main = Blueprint('main', __name__, template_folder='newName') 

@main.route('/') 
def index(): 
    return render_template("index.html") 

然後我註冊並運行我的應用程序:

app.register_blueprint(main) 
app.run(debug=True) 

但是,如果我當時去改變我的templates目錄的名稱newName我得到jinja2.exceptions.TemplateNotFound。如果我將目錄名稱更改回templates,我的應用程序正常工作並呈現index.html頁面;藍圖正在註冊,但template_folder參數似乎是無關緊要的。爲什麼它沒有影響,如何使用藍圖將我的模板存儲在newName中?

編輯:

我有以下結構:

run.py <--- from app import build 
      build().run(debug=True) 
app/ 
    __init__.py <--- define build: register bp and return app 
    controllers/ 
     __init__.py <--- import main blueprint from main 
     main.py <--- create main blueprint as above 
    newName/ 
     index.html 

回答

2
$ tree 
. 
├── app.py 
└── foo 
    ├── bp 
    │   └── index.html 
    └── __init__.py 

2 directories, 3 files 
# atupal at xiaomi in /tmp/atupal/py [13:25:26] 
$ cat app.py 
from flask import Flask 

import foo 

app = Flask(__name__) 

app.register_blueprint(foo.bp) 

if __name__ == '__main__': 
    app.run(debug=True) 
# atupal at xiaomi in /tmp/atupal/py [13:25:28] 
$ cat foo/__init__.py 
from flask import Blueprint, render_template 

bp = Blueprint('bp', __name__, template_folder='bp') 

@bp.route('/') 
def index(): 
    return render_template('index.html') 
# atupal at xiaomi in /tmp/atupal/py [13:25:37] 
$ curl http://127.0.0.1:5000/ 
<p> 
    index 
</p> 

從文檔中,我們可以看到:

至於靜態文件,路徑可以是絕對的或相對於藍圖資源文件夾。模板文件夾被添加到模板的搜索路徑,但優先級低於實際應用程序的模板文件夾。這樣,您可以輕鬆覆蓋藍圖在實際應用程序中提供的模板。

因此,如果您提供的template_folder不存在。 Flask將在應用程序的模板文件夾中搜索它,默認名稱是「模板」。

+0

修改過的名字對我來說也適用於我使用該項目結構,我更新了我的問題以顯示我的項目結構似乎並不工作。 – alh

+0

您需要移動'controllers'下的'newName'摺疊號。 – atupal

+0

爲什麼如果我將'newName'更改爲'templates',它會起作用?它是否回滾到默認值或什麼? – alh