我试图显示一个项目菜单(如午餐菜单),但我无法让它们显示出来。我通过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 %}
答案 0 :(得分:4)
您正在循环中访问menu_items
上的属性。您打算使用item
来访问每个项目的属性。
Flask的Jinja环境默认跳过渲染未定义的值。 menu_items
没有description
属性,因此Jinja将其视为未定义。您可以使用其他undefined type来使其更严格。
from jinja2 import StrictUndefined
app.jinja_env.undefined = StrictUndefined
答案 1 :(得分:0)
使用first()时无法循环,因为它返回的是一个项而不是列表。
在您发布的模板中,您循环遍历每个项目,但始终引用列表而不是项目(项目而不是menu_items)。