首页 > 解决方案 > For loop in Jinja2 splitting the chars in nested list, instead of returning whole of nested list

问题描述

My doubts list is [['a','b','This is a sentence']] My HTML (Jinja) is

{% for x in doubts %}
{{ x }}
{% endfor %}

My Flask is :-

connection = mysql.connector.connect(host='127.0.0.1',database='wizlearn',user='root',password='pokemon2345')
    cursor = connection.cursor(buffered=True)
    login = session['login']
    admission_no = login[4]
    cursor.execute('SELECT * FROM doubts WHERE student = {0}'.format(admission_no))
    result = json.dumps(list(cursor.fetchall()))
    app.logger.debug(result)
    cursor.close()
    connection.close()
    return render_template('doubt_history.html', doubts=result)

x is giving a,b,T,h,i,s,i,s,a,s,e,n,t,e,n,c,e [Each char one iteration]

I expected a,b,This is a sentence. [Only one iteration]

How do I resolve this? Thanks in advance!

标签: pythonsqlflaskmultidimensional-arrayjinja2

解决方案


由于某种原因,您已将输出转储到 json。不要那样做。将值cursor.fetchall()直接传递给模板。

此外,永远不要通过字符串插值将用户输入或任何数据直接传递到 SQL 查询中;这使您面临 SQL 注入攻击。始终使用参数:

cursor.execute('SELECT * FROM doubts WHERE student = %s', (admission_no))

(您还没有说您使用的是什么数据库,如果您使用的是 sqlite,则需要使用?而不是%s那里。)


推荐阅读