2016-05-13 34 views
-1

私はフラスコの初心者ですが、私はウェブで表示するmysqlデータを取得したいです。しかし、それはユニコードなので解決するために2つ使用してみてください。私はUTF-8
フラスココードフラスコ2 forループはユニコードからutf-8をエンコードします

#coding=utf-8 
from flask import Flask, request, render_template 
from flaskext.mysql import MySQL 

mysql = MySQL() 
app = Flask(__name__) 

app.config['MYSQL_DATABASE_USER'] = 'root' 
app.config['MYSQL_DATABASE_PASSWORD'] = '' 
app.config['MYSQL_DATABASE_DB'] = 'test' 
app.config['MYSQL_DATABASE_HOST'] = 'localhost' 

mysql.init_app(app) 

@app.route('/') 
def showbookname(): 
    cursor = mysql.get_db().cursor() 
    cursor.execute("SELECT * FROM manager ") 
    bookname = cursor.fetchall() 
    return render_template('book.html', bookname = bookname) 

if __name__ == '__main__': 
    app.run(debug = True) 

間違ったHTML

<!DOCTYPE html> 
 
<html lang="en"> 
 
<head> 
 
    <meta charset="UTF-8"> 
 
    <title>Title</title> 
 
</head> 
 
<body> 
 
{{ bookname }} 
 
</body> 
 
</html>

にユニコードをエンコードするために、ループのための2つを使用することができた理由を知っています(私は私の目標を達成しなかったが。)

結果((u'Tom',123'), (u'Mark', u'123'))、私の予想結果は((Tom,123),(Mark,123))

正しいHTMLである

<!DOCTYPE html> 
 
<html lang="en"> 
 
<head> 
 
    <meta charset="UTF-8"> 
 
    <title>Title</title> 
 
</head> 
 
<body> 
 
{% for items in bookname %} 
 
    {% for item in items %} 
 
{{ item }} 
 
{% endfor %} 
 
{% endfor %} 
 
</body> 
 
</html>

reasultはTom 123 Mark 123 .ITの2のようですforループがテーブル全体を反復処理し、printすべてのデータ

+0

これはunicodeとは関係ありませんが、 'cursor.fetchall()'メソッドを使うと、タプルのリストを返します。このようなもの: '[(...、...)、(...、...)]'。このため、最初に 'list'を反復し、次に' tuple'を使って必要な値を取得する必要があります。 –

答えて

0

期待通りです不幸にもrect。元の出力は正しいです - 行のリスト自体を印刷していて、それはユニコードの問題ではありません。つまり、表示することができる何らかの方法で行をシリアライズする必要があります。この場合は((column, column, ...), (column, column, ...), ...)です。これはPythonのrepr(bookname)から来ていて、あなたは特定の方法で見るためにそれに頼るべきではありません。 uを前に付けることによって、どの文字列がUnicodeであるかを表示するだけです。

あなたが期待される出力をしたい場合、あなたはそれを自分で構築する必要があります:

(
{% for items in bookname %} 
    (
    {% for item in items %} 
     {{ item }} 
     {% if not loop.last %} 
      , 
     {% endif %} 
    {% endfor %} 
    ) 
    {% if not loop.last %} 
     , 
    {% endif %} 
{% endfor %} 
) 

あなたは出力にそれをしたくない場合は、テンプレートから空白を削除する必要があります。しかし、私は、現実には、異なる出力フォーマットを望むことを期待しています。テンプレートを調整するだけです。

+0

ありがとう、viraptor。 –

関連する問題