在Jinja中呈现数据库结果似乎添加了额外的{}字符

2024-10-04 03:22:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在模板中呈现SQLite数据库查询的结果。然而,它们看起来都像{ColIntitule': u'I like IceCream'}。我不想要{}或列名。如何正确渲染?你知道吗

def query_db(query, args=(), one=False):
    cur = g.db.execute(query, args)
    rv = [dict((cur.description[idx][0], value) for idx, value in enumerate(row)) for row in cur.fetchall()]
    return (rv[0] if rv else None) if one else rv

@app.route('/toto')
def toto():
    entries = query_db("select ColIntitule from toto where col1 = 1")
    return render_template('show_results.html', entries = entries)   

show_results.html

{% extends "layout.html" %}
{% block body %}
<ul class=entries>
    {% for entry in entries %}
    <li><h2>{{ entry }}</h2>
    <br>
    {% else %}
    <li><em>No entry here</em>
    {% endfor %}
</ul>
{% endblock %}

Tags: infordbdefhtmlargsqueryone
2条回答

可能是问题中的一个输入错误,但是在toto()entry是在哪里定义和设置的?是否有一个全球性的潜伏?你知道吗

查询结果被绑定到entries,而entry被传递到render_template()这一事实可能解释了这一点。你知道吗

entriesdict对象的列表,因此当您使用{{ entry }}在模板中打印它们时,您正在打印dictrepr。你知道吗

你的模板应该更像这样

{% extends "layout.html" %}
{% block body %}
<ul class=entries>
    {% for entry in entries %}
    <li><h2>{{ entry["ColIntitule"] }}</h2>
    <br>
    {% else %}
    <li><em>No entry here</em>
    {% endfor %}
</ul>
{% endblock %}

相关问题 更多 >