SQLAlchemy 模型数据不会在 Jinja 循环中呈现



我正在尝试显示项目菜单(如午餐菜单),但我无法让它们显示。 我通过 Flask-Admin 页面添加了项目并检查了数据库以验证项目是否确实存在,所以我知道这不是我的问题。 为什么菜单项数据不在循环中呈现?

class MenuItems(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(50), index=True, unique=True)
    price = db.Column(db.Float(6), unique=False)
    description = db.Column(db.String(140))
@app.route('/menu')
def menu():
    menu_items = MenuItems.query.all()
    return render_template('menu.html', title="Dave's Bread - Menu",  menu_items=menu_items, user=current_user)
{% for item in menu_items %}
  <td>
    <p><strong>{{ menu_items.name }}</strong></p>
    <p>{{ menu_items.description }}</p>
    <p>Price: {{ menu_items.price }}</p>
  </td>
{% endfor %}

您正在访问循环内menu_items的属性。 您打算使用item来访问每个项的属性。

默认情况下,Flask 的 Jinja 环境会跳过渲染未定义的值。 menu_items没有description属性,因此 Jinja 将其视为未定义。 可以通过使用不同的未定义类型使其更加严格。

from jinja2 import StrictUndefined
app.jinja_env.undefined = StrictUndefined

使用 first() 时无法循环,因为它返回一个项目,而不是一个列表。

在您发布的模板中,您循环遍历每个项目,但始终引用列表而不是项目(项目而不是menu_items)。

最新更新