我正在使用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)
答案 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}}参数可选,您将使用此错误访问包含这两个网址的视图,但您肯定需要处理新错误我会推荐第一个解决方案,因为它对用户来说不那么令人费解,而且对你来说也不那么棘手。
基本上,大多数人都希望在浏览此类网站的根页时登陆主页或餐馆列表。此外,保持简单易懂也始终是一种良好的发展实践。