我正在尝试实施一个简单的餐厅菜单网站,其中显示了餐馆及其菜单项的列表。
newMenuItem
是在餐馆中添加新菜单项的功能。 MenuItem
是菜单项表,Restaurant
是餐馆的表格,而restaurantmenu
是仅显示餐馆菜单项列表的功能。
@app.route('/restaurants/<int:restaurant_id>/new', methods = ['GET', 'POST'])
def newMenuItem(restaurant_id):
if request.method == 'POST':
newItem = MenuItem(name = request.form['name'], restaurant_id = restaurant_id)
session.add(newItem)
session.commit()
flash("new menu item created!")
return redirect(url_for('restaurantmenu', restaurant_id = restaurant_id))
else:
return render_template('newmenuitem.html', restaurant_id = restaurant_id)
restaurantmenu
功能
@app.route('/restaurants/<int:restaurant_id>/', methods = ['GET', 'POST'])
def restaurantmenu(restaurant_id):
restaurant = session.query(Restaurant).filter_by(id=restaurant_id).one()
items = session.query(MenuItem).filter_by(restaurant_id=restaurant.id)
return render_template('menu.html', restaurant = restaurant, items = items)
menu.html
模板显示菜单项列表,这是我尝试显示Flash消息的位置。它的代码是
<html>
<body>
<h1>{{restaurant.name}}</h1>
{% with messages = get_flashed_messages() %}
{% if messages %}
<ul>
{% for message in messages %}
<li>{{message}}</li>
{% endfor %}
</ul>
{% endif %}
{% endwith %}
<a href='{{url_for('newMenuItem', restaurant_id = restaurant.id)}}'>Create New Item</a>
{% for i in items %}
<div>
<p>{{i.name}}</p>
<p>{{i.description}}</p>
<p> {{i.price}} </p>
<a href='{{url_for('editMenuItem', restaurant_id = restaurant.id, menu_id = i.id)}}'>Edit</a>
<a href='{{url_for('deleteMenuItem', restaurant_id = restaurant.id, menu_id = i.id)}}'>Delete</a>
<br>
</div>
{% endfor %}
</body>
</html>
我知道“with”关键字用于清理文件流等资源,但在这种情况下,如果我删除该关键字,则在尝试显示菜单项时会出现TemplateSyntaxError。
TemplateSyntaxError: Encountered unknown tag 'messages'
我不明白“with”关键字是如何使它全部工作的。没有它,不应该将闪存消息数组保存到messages
变量中,以便后续的for
循环访问吗?
答案 0 :(得分:1)
没有。这是Jinja2模板语言,而不是Python; with
是您定义变量的方式。模板语言中没有直接赋值。