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

时间:2016-02-22 16:45:36

标签: python flask sqlalchemy jinja2

我试图显示一个项目菜单(如午餐菜单),但我无法让它们显示出来。我通过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 %}

2 个答案:

答案 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)。