TypeError:restaurantMenu()缺少1个必需的位置参数:'restaurant_id'

时间:2017-12-20 08:41:05

标签: python-3.x

我正在使用flask框架进行开发,在执行时会发出以下错误

  

TypeError:restaurantMenu()缺少1个必需的位置参数:   “restaurant_id'`

from flask import Flask,render_template
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from database_setup import Base, Restaurant, MenuItem

app = Flask(__name__)

engine = create_engine('sqlite:///restaurantmenu.db')
Base.metadata.bind = engine

DBSession = sessionmaker(bind=engine)
session = DBSession()


@app.route('/')
@app.route('/restaurants/<int:restaurant_id>/')
def restaurantMenu(restaurant_id):
    restaurant = session.query(Restaurant).filter_by(id=restaurant_id)
    items = session.query(MenuItem).filter_by(restaurant_id=restaurant.id)

    return render_template('menu.html',restaurant=restaurant,items=items)

# Task 1: Create route for newMenuItem function here


@app.route('/restaurant/<int:restaurant_id>/new/')
def newMenuItem(restaurant_id):
    return "page to create a new menu item. Task 1 complete!"

# Task 2: Create route for editMenuItem function here


@app.route('/restaurant/<int:restaurant_id>/<int:menu_id>/edit/')
def editMenuItem(restaurant_id, menu_id):
    return "page to edit a menu item. Task 2 complete!"

# Task 3: Create a route for deleteMenuItem function here


@app.route('/restaurant/<int:restaurant_id>/<int:menu_id>/delete/')
def deleteMenuItem(restaurant_id, menu_id):
    return "page to delete a menu item. Task 3 complete!"


if __name__ == '__main__':
    app.debug = True
    app.run(host='0.0.0.0', port=5000)

1 个答案:

答案 0 :(得分:1)

@app.route('/')
@app.route('/restaurants/<int:restaurant_id>/')
def restaurantMenu(restaurant_id):

下面。 假设您的网站位于http://bacon.egg/

因此,您可以restaurantMenu()http://bacon.egg/访问http://bacon.egg/<restaurant-id>/视图。

但是,restaurantMenu期望一个位置参数(restaurant_id)。通过路线http://bacon.egg/

访问时未提供

好的,如何修复它,您可以删除@app.route('/')或将restaurant_id参数设为可选(def restaurantMenu(restaurant_id = None))。

  • 如果您删除@app.route('/'),则无法使用网址http://bacon.egg/访问此视图,但只能使用http://bacon.egg/restaurant-id
  • 如果您restaurant_id的{​​{1}}参数可选,您将使用错误访问包含这两个网址的视图,但您肯定需要处理新错误

我会推荐第一个解决方案,因为它对用户来说不那么令人费解,而且对你来说也不那么棘手。

基本上,大多数人都希望在浏览此类网站的根页时登陆主页或餐馆列表。此外,保持简单易懂也始终是一种良好的发展实践。