我正在尝试显示项目菜单(如午餐菜单),但我无法让它们显示。 我通过 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)。