2014-05-24 123 views
5

我的項目結構如下圖所示瓶無法找到模板

run.py 
lib/ 
mysite/ 
    conf/ 
     __init__.py (flask app) 
     settings.py 
    pages/ 
     templates/ 
      index.html 
     views.py 
     __init__.py 

這是mysite.conf.__init__

from flask import Flask 

app = Flask(__name__) 
app.debug = True 

我的想法是,現在進口app到所有其他模塊使用它來創建視圖。在這種情況下,有一個模塊pages

pages.views我有一個像

from flask import render_template 
from mysite.conf import app 

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

index.html一些代碼放置在pages/templates

當我運行從run.py這個應用程序是像下面

from mysite.conf import app 
app.run() 

我越來越找不到模板錯誤。 如何解決它?爲什麼會發生這種情況!

我基本上是一個django的傢伙,每次在每個模塊中創建一個視圖時都面臨很多不便,導入wsgi對象!它有點瘋狂 - 這在某種程度上鼓勵了循環進口。有什麼辦法可以避免這種情況?

+0

嘗試'render_template('templates/index.html')' – ajkumar25

回答

10

Flask預計templates目錄與創建它的模塊位於同一文件夾中;它正在尋找mysite/conf/templates,不是mysite/pages/templates

你需要告訴瓶到別處尋找替代:

app = Flask(__name__, template_folder='../pages/templates') 

這個工程作爲路徑是相對於當前模塊路徑解決。

您不能擁有每個模塊的模板目錄,而不是沒有使用blueprints。一種常見的模式是使用templates文件夾的子目錄來替代您的模板。你會使用templates/pages/index.html,加載render_template('pages/index.html')等。

另一種方法是使用每個子模塊的Blueprint實例;您可以爲每個藍圖分配一個單獨的模板文件夾,用於註冊到該藍圖實例的所有視圖。請注意,藍圖中的所有路線都必須以該藍圖的唯一通用前綴(可以爲空)開始。

+0

我還有一些像'person'這樣的模塊。我想查看「person/templates」目錄。如何自動執行此操作.. – Iamcool

+0

@Iamcool:要麼使用每個模塊的藍圖(可以配置自己的獨立模板文件夾),要麼不這樣做。通常你會使用'templates /'的子文件夾,比如'templates/person',然後加載'render_template('person/template.html')'。 –

+0

我偶然看到藍圖。那麼它說他們不是可插拔的應用程序。如果我們比較Django的應用程序..他們有多不同? – Iamcool