在烧瓶Jinja模板上显示唯一值

时间:2019-05-23 01:25:40

标签: python flask sqlalchemy jinja2

我对自己的views.py有疑问:

query = db.session.query(Basket, Fruits).filter(Fruits.basket_id == Basket.id)

在html模板中,我希望显示每个购物篮ID(此处的购物篮ID是唯一的),每个购物篮内的水果是什么,因此我在模板中使用了嵌套的for循环。

我已经尝试过html模板:

{% for basket in query | unique %}
<p>{{ basket.Basket.id }}</p>
{% for fruits in query %}
<p>{% if basket.Basket.id == fruits.Basket.id %}
<p>{{ query.Fruits.fruit }}</p>
{% endif %}
{% endfor %}

但是不会显示唯一的购物篮ID。

我曾考虑过创建2个查询,以便可以放置.distinct并显示唯一的购物篮ID,然后使用另一个查询显示水果,但这对我来说没有意义,因为我仍然需要所有信息在整个查询中。摇瓶初学者。

1 个答案:

答案 0 :(得分:0)

您也许可以通过one to many relationship来实现。

class Basket(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(100))
    fruits = db.relationship('Fruit', backref='basket')

class Fruit(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100))
    basket_id = db.Column(db.Integer, db.ForeignKey('basket.id'))


@app.route('/')
def baskets():
    baskets = db.session.query(Basket).all()
    return render_template('baskets.html', baskets=baskets )

Jinja2模板:

{% for b in baskets %}
<ul>
  <p>
    {% b.name %}
  </p>
  {% for f in b.fruits %}
    <li>{{ f.name }}</li>
  {% endfor %}
</ul>
{% endfor %}