2015-10-27 86 views
0

我試圖用瓶路由如查詢sqlite的使用燒瓶路由

@app.route ('/movies/genres/<name>/') 
def test(name = None): 
    g.db = connect_db() 
    cur = g.db.execute('select * from movies where category = ?', [name]) 
    movies = [dict(id=row[0], movie_name=row[1]) for row in cur.fetchall()] 
    g.db.close() 
    return render_template('test.html', movies=movies, name=name) 

路由不工作來查詢我的SQLite數據庫,但頁面不顯示從數據庫中的任何數據。

{% for movie in movies %} 

<div> 
<div class="well" style="width:220px; height:312px; float:left; margin:10px; padding:5px;"> 
<img src="{{ movie.poster }}" alt="uh oh" style="width:209px;height:300px">   {{ movie.movie_name }} 
</div> 
{% endfor %} 
{% endblock %} 

任何人都可以看到的問題可能是什麼?

+0

你試過打印出你的電影集合嗎?它會返回任何東西嗎?如果你想回到像預期的電影,然後張貼你的test.html。您的模板中可能存在問題 – lastmjs

+0

然後可能某處出現name參數錯誤。當您撥打您的路線時嘗試打印姓名。 – lastmjs

+0

添加上面的模板。當我在sql查詢中指定類別時,它起作用 – user3080562

回答

0

該錯誤可能是別的地方,因爲這個工作對我來說:

文件demo.py

#!/usr/bin/env python3 

from flask import Flask, g, render_template 
import sqlite3 

app = Flask(__name__) 

@app.route('/movies/genres/<name>/') 
def test(name=None): 
    g.db = connect_db() 
    cur = g.db.execute('select id, name from movies where category = ?', [name]) 
    movies = [dict(id=row[0], movie_name=row[1]) for row in cur.fetchall()] 
    g.db.close() 
    return render_template('test.html', movies=movies, name=name) 


def connect_db(): 
    return sqlite3.connect('example.db') 

def init_db(): 
    conn = connect_db() 
    c = conn.cursor() 
    try: 
     c.execute('create table movies (id int, name text, category text)') 
     c.execute('insert into movies (id, name, category) values (?, ?, ?)', (1, 'Alien', 'sci-fi')) 
     c.execute('insert into movies (id, name, category) values (?, ?, ?)', (2, 'Aliens', 'sci-fi')) 
     c.execute('insert into movies (id, name, category) values (?, ?, ?)', (3, 'Prometheus', 'sci-fi')) 
    except sqlite3.OperationalError as e: 
     assert 'table movies already exists' in str(e) 
    conn.commit() 
    conn.close() 

def main(): 
    init_db() 
    app.run(debug=True) 


if __name__ == '__main__': 
    main() 

文件templates/test.html

<ul> 
    {%- for movie in movies %} 
     <li>{{ movie.movie_name }}</li> 
    {%- endfor %} 
</ul> 

控制檯:

$ ./demo.py & 
* Running on http://127.0.0.1:5000/ 
$ curl 127.0.0.1:5000/movies/genres/sci-fi/ 
<ul> 
     <li>Alien</li> 
     <li>Aliens</li> 
     <li>Prometheus</li> 
</ul> 
+0

這工作!我認爲我的問題是我太早關閉數據庫連接,導致代碼無法返回,只是路由工作成功!我非常感謝你的幫助! – user3080562