没有“with”关键字的TemplateSyntaxError

2024-09-30 05:30:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试实现一个简单的餐厅菜单网站,显示餐厅及其菜单项的列表

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循环访问吗


Tags: nameidurl列表forsessionhtmlitems

热门问题