2016-05-13 8 views
-1

Ich bin Neuling in Kolben, möchte ich mysql Daten im Web zeigen.Aber es ist Unicode, so versuche ich zwei für die Lösung zu verwenden. Aber jetzt möchte ich wissen, der Grund, warum ich zwei for-Schleifen Unicode utf-8
Kolben CodeKolben zwei für Schleifen kodieren Unicode zu 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) 

die falsche HTML

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

kodieren können

das Ergebnis ((u'Tom',123'), (u'Mark', u'123')), mein erwartetes Ergebnis ist ((Tom,123),(Mark,123))

die richtige HTML (obwohl ich nicht mein Ziel erreichen.)

<!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>

die Reasult Tom 123 Mark 123 .Es sind wie zwei sind for Schleifen iterieren über die Tabelle und print alle Daten

+0

Dies hat nichts mit Unicode zu tun, aber wenn Sie die Methode 'cursor.fetchall()' verwenden, wird eine Liste von Tupeln zurückgegeben. So etwas wie: '[(..., ...), (..., ...)]'. Aus diesem Grund müssen Sie zuerst durch die "Liste" und dann durch das "Tupel" iterieren, um die erforderlichen Werte zu erhalten. –

Antwort

0

Ihre Erwartung ist incor rect leider. Die ursprüngliche Ausgabe ist korrekt - Sie drucken die Liste der Zeilen selbst aus und es handelt sich nicht um ein Unicode-Problem. Das bedeutet, dass die Zeilen in einer Weise serialisiert werden müssen, die angezeigt werden kann. In diesem Fall ist das ((column, column, ...), (column, column, ...), ...). Es kommt von Pythons repr(bookname) und Sie sollten nicht darauf verlassen, dass es auf eine bestimmte Art und Weise aussieht. Es zeigt zufällig, welche Strings unicode sind, indem es die u voranstellt.

Wenn Sie die Ausgabe, die Sie erwarten wollen, haben Sie es zu konstruieren selbst:

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

Sie werden die Leerzeichen aus der Vorlage zu entfernen, wenn Sie es nicht wollen, in der Ausgabe. Aber ich erwarte, dass Sie in Wirklichkeit ein anderes Ausgabeformat haben wollen - Sie müssen nur Ihre Vorlage dafür anpassen.

+0

Vielen Dank, Viraptor. –

Verwandte Themen