6

我是 Flask 和 Python 的新手,所以提前道歉。我正在使用 Flask-SQLAlchemy 返回一个数据库行,这一切都很好:

customer = Customers.query.filter_by(cat_id = page).first()
return render_template('test.html',
    customer = customer
    )

我的问题是我试图弄清楚如何使用循环在我的 jinja 模板中显示该行的列值。这是解决这个问题的最佳方法吗?我得到了“对象不可迭代”的错误,我有点理解,但我不确定如何解决它。

在我目前使用的模板中:

{{customer.id}}
{{customer.name}}
{{customer.area}}
etc.

但我想做这样的事情:

{% for item in customer %}
    {{item[column]}}
{% endfor %}

可以将查询转换为字典吗?

我已经搜索了所有试图弄清楚这一点但没有运气,这让我认为我可能走错了路。

非常感谢任何建议。


更新:
我认为这是进步。主要的变化是在views.py 中,我添加.__dict__了从我读到的访问__dict__SQLAlchemy 对象内部的内容。for 模板循环现在输出列值,但它也输出许多其他不需要的东西。反正有清理这个吗?

模型.py

class Customers(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    cust_name = db.Column(db.String(64))
    cust_area = db.Column(db.String(64))
    cat_id = db.Column(db.Integer(8), index = True)

视图.py

customer = Customers.query.filter_by(cat_id = page).first()
return render_template('test.html',
    customer = customer.__dict__
    )

测试.html

{% for key, value in customer.items() %}
    {{ key }} , {{ value }}
{% endfor %}

输出

cust_name , John _sa_instance_state , 
<sqlalchemy.orm.state.InstanceState object at 0x03961D50> id , 1 cat_id , 2 cust_area , England
4

1 回答 1

7

首先在您的视图中将客户行转换为字典。

customer = Customers.query.filter_by(cat_id = page).first()
customer_dict = dict((col, getattr(customer, col)) for col in customer.__table__.columns.keys())
return render_template('test.html',
customer_dict = customer_dict
)

您可以在 customer_dict 行上使用 iteritems()。

{% for key, value in customer_dict.iteritems() %}

   {{ key }} , {{ value }}

{% endfor %}  
于 2013-06-05T18:48:29.513 回答