我正在尝试实现一个简单的餐厅菜单网站,显示餐厅及其菜单项的列表
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
循环访问吗
不,这是Jinja2模板语言,不是Python
with
是定义变量的方式。模板语言中没有直接赋值相关问题 更多 >
编程相关推荐