我需要将字段从mysql查询发送到HTML模板选择。这是我的python代码:
class Estilos(webapp2.RequestHandler):
def get(self):
db = .....
cursor = db.cursor()
cursor.execute('SELECT estilo, n1 FROM estilos;')
lista = []
for row in cursor.fetchall():
lista.append([cgi.escape(row[0]),
cgi.escape(row[1])
])
variables = {'lista':lista}
template = JINJA_ENVIRONMENT.get_template('estilo.html')
self.response.write(template.render(variables))
db.close()
这是我的HTML模板:
<html>
<form action="/sign" method="post">
<br />
<div>Estilo: <select name="estilo" style="width:400px">
{% for e in lista %}
<option value="{{ e }}">{{ e }}
</option>
{% endfor %}
</select>
</div>
<div> N1: <select name="n1" style="width:400px">
{% for e in lista %}
<option value="{{ e }}" >{{ e }}
</option>
{% endfor %}
</select>
</div>
<div><input type="submit" value="Selecionar"></div>
</form>
此代码显示选择字段中的整行:[&#39; STRONG PALE ALE&#39;,&#39; ALE&#39;]
当我将表单选择值更改为
时 <option value="{{ e[0] }}">{{ e[0] }}
</option>
然后我得到一个unicode解码错误。
<option value="{{ e[0] }}">{{ e[0] }} UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 1: ordinal not in range(128)
我曾尝试将cgi.escape编码为utf8,但我无法使其正常工作。有人知道如何解决这个问题吗?编码字符串的正确方法是什么?
答案 0 :(得分:0)
从字面上理解报告的每一个细节(即假设你在报告中完全没有错误,也没有混淆你的代码的不同版本)我会感到难过:\xc4
(大写字母A和变音符号,例如latin-1 )无处不在
然而,OP在评论中证实他 实际上混合了不同版本的代码,在这种情况下......:
一个好主意是使用cgi.escape(row[0].decode('ascii','replace'))
&amp; c,并查看问号在哪里替换预期的字符。 OP在评论中证实了这对他们有用。
为了完整性,考虑具有类似问题的未来读者:如果decode
没有显示任何内容,他们可以尝试使用encode
,但这可能会提供OP最初报告的相同UnicodeDecodeError