2014-01-16 54 views
6

我想傳遞一個頁面列表,並在Jinja2中循環顯示我的網站的所有頁面。我使用Flask構建和運行應用程序。我跟着正式的燒瓶文件,連同this tutorial。但是,當我嘗試傳遞列表並嘗試循環它時,它不會出現在呈現的html中。如何通過項目循環使用Jinja2/Flask?

我在做什麼錯?如何正確傳遞列表並循環使用base.html作爲模板?

這裏是我的代碼與虛擬頁面列表硬編碼:

app.py

from flask import Flask, render_template 

app = Flask(__name__) 


@app.route('/') 
def index(): 
    page_list = ['Eins', 'Zwei'] 
    return render_template('base.html', pages=page_list) 


if __name__ == "__main__": 
    app.run(port=8000) 

而且base.html,位於/templates/

<html> 
<head> 
<title>Test</title> 
</head> 

<body> 
<h1>All the nice pages</h1> 
{% for page in pages %} 
<p>{{ page }}</p> 
{% endfor %} 
</body> 
</html> 

當我運行的應用程序和瀏覽到http://127.0.0.1:8000/,這就是我得到的:

<html> 
<head> 
<title>Test</title> 
</head> 

<h1>All the nice pages</h1> 
<body> 

</body> 
</html> 
+0

有些事情是不正確的。您的代碼按照您的預期工作。啓動應用程序後你有沒有改變'app.py'?你需要重新加載它。我建議你在調用'app.run()'的時候加入'debug = True'。 – dirn

+0

該代碼工作正常,重新啓動您的服務器 –

+0

我試過你的應用程序,它工作得很好,它將兩個頁面列表打印到瀏覽器。重新加載應用程序或停止同步應用程序在後臺運行。 – ajkumar25

回答

2

此代碼完全有效。重要的是如果您對列表或字典進行更改,請重新啓動服務器。

除此之外,在Flask中,您可以傳遞任何內置於Python中的類型,可以是listdictionarytuple

這裏是爲每個傳遞或多或少的相同內容的類型的短例如:

from flask import Flask, render_template 

adictionary = {'spam': 1, 'eggs': 2} 
alist = ['Eins', 'Zwei', 'Drei'] 
atuple = ('spam', 'eggs') 

app = Flask(__name__) 


@app.route('/') 
def index(): 
    return render_template('base.html', pages=alist) 


@app.route('/tuple/') 
def tuple(): 
    return render_template('base.html', pages=atuple) 


@app.route('/dict/') 
def adict(): 
    return render_template('base.html', pages=adictionary) 

if __name__ == "__main__": 
    app.run(port=8000) 
0

我在這個相同的問題。我使用Sublime Text 3,並意識到我沒有自動將製表符轉換爲空格。一旦我在用戶設置中進行更改並重新執行腳本,它就會正確輸出列表。