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 %}

クエリを辞書に変換できますか?

運が悪いので、これを理解しようとしていたるところを検索しました。これにより、間違った方向に進んでいる可能性があると思います。

アドバイスをいただければ幸いです。


更新:
これは進歩だと思います。.__dict__主な変更は、私が読んだものから__dict__SQLAlchemy オブジェクトの内部にアクセスする追加した views.py にあります。for テンプレート ループは列の値を出力するようになりましたが、他にも多くの望ましくないものを出力します。とにかくこれをきれいにすることはありますか?

models.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__
    )

test.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