Python 烧瓶-未定义错误:';餐厅id';是未定义的

Python 烧瓶-未定义错误:';餐厅id';是未定义的,python,flask,url-routing,function,Python,Flask,Url Routing,Function,我试图引用本页的另一页 <html> <head> </head> <body> <header> <h1>Restaurants<h1> </header> {% for i in restaurants %} <h5> &

我试图引用本页的另一页

<html>
    <head>
    </head>
    <body>
          <header>
              <h1>Restaurants<h1>
          </header>


          {% for i in restaurants %}

          <h5>
              <a href= "*">
                  {{i.name}}
              </a>
            &nbsp &nbsp
              <a href = "*">  Edit </a> &nbsp
              <a href = "*">  Delete  </a>
          </h5>

           {% endfor %}

        <a href = {{url_for('newRestaurant', restaurant_id = restaurant_id)}}> Create new restaurant </a>
    </body>
</html>

在jinja模板中,您不向餐厅id发送任何内容:

{{url_for('newRestaurant', restaurant_id = restaurant_id)}}
第二个
餐厅id
没有定义,因为您没有通过它向模板发送任何值

您应该从
新餐厅
功能发送一个号码

例如(这只是一个简单的示例),您可以验证餐厅表中是否没有行,如果没有行,则启动
餐厅id=1

已编辑

@app.route('/restaurant/<int:restaurant_id>', methods = ['GET','POST'])
def newRestaurant(restaurant_id):
    if request.method == 'POST':
        .............
    else:
        restaurants = session.query(Restaurant).all()
        if not restaurants:
            restaurant_id = 1
        else:
            nr_restaurants = session.query(Restaurant).count()
            restaurant_id = int(nr_restaurants) + 1
        return render_template('newRestaurant.html', restaurant_id = restaurant_id)
@app.route('/restaurant/',方法=['GET','POST'])
def新餐厅(餐厅id):
如果request.method==“POST”:
.............
其他:
餐厅=session.query(餐厅).all()
如果不是餐馆:
餐厅id=1
其他:
nr_restaurants=session.query(Restaurant.count)()
餐厅id=int(北餐厅)+1
返回呈现模板('newRestaurant.html',restaurant\u id=restaurant\u id)

现在,您正在通过
餐厅id
变量向模板发送一个数字,您可以在那里使用它。

我解决了这个问题,下面是如何解决的

考虑到我只需要创建一家新餐厅,我不需要在url上获取餐厅的id。因此,我们应该这样做

@app.route('/restaurant//new',methods=['GET','POST'])

我删除了id部分,并删除了def newRestaurant函数中的参数,如下所示

@app.route('/restaurant/new',methods=['GET','POST'])


非常感谢大家,在我的
deleteMenuItem
定义下添加
restaurant\u id=restaurant\u id
时提供了一些线索


请尝试正确设置格式(键入时检查预览区域)。如果你的帖子很难阅读,你就不会得到答案。我现在会帮你解决这个问题。你能提供重新创建错误的步骤吗。据我所知,Jinja2模板的视图不知道餐厅id是什么,我需要粘贴整个webserver.py,你希望我如何将其发送给你,还是ypu有办法让我分享我的建议我仔细地遵循了你的建议并理解了它。非常感谢你。执行后,我仍然得到同样的错误(UndefinedError:“餐厅id”未定义)编辑:您编写了
POS
,而不是
POST
,并且我从路线中删除了
/new
。试试看。您还应该将模板页面的代码与发送
POST
的表单放在一起。呈现模板的功能是
render\u template
而不是
render
。对不起,我不明白您所说的“将模板页面的代码与发送POST的表单放在一起”是什么意思.A
POST
请求通常通过表单的
方法
属性从表单发送。你应该读一下。
{{url_for('newRestaurant', restaurant_id = restaurant_id)}}
@app.route('/restaurant/<int:restaurant_id>', methods = ['GET','POST'])
def newRestaurant(restaurant_id):
    if request.method == 'POST':
        .............
    else:
        restaurants = session.query(Restaurant).all()
        if not restaurants:
            restaurant_id = 1
        else:
            nr_restaurants = session.query(Restaurant).count()
            restaurant_id = int(nr_restaurants) + 1
        return render_template('newRestaurant.html', restaurant_id = restaurant_id)