【发布时间】:2020-07-12 23:41:00
【问题描述】:
我正在尝试将参数从 HTML 代码传递给 python 烧瓶代码,但是当我这样做时出现错误:
TypeError: search() 缺少 1 个必需的位置参数:'name'
这是代码的sn-p:
@app.route("/LoggedOn/search", methods = ["POST"])
def search(name): # gets a user name as an argument
books = []
if request.method != "POST":
return "please log on and fill on the form"
option = request.form['field']
search = request.form['search']
search = search + '%' #begins with search, per requirement
if (option == 'author'):
books = db.execute("SELECT * FROM books WHERE author LIKE :srch ", {"srch":search}).fetchall()
elif (option == 'isbn'):
books = db.execute("SELECT * FROM books WHERE isbn LIKE :srch ", {"srch":search}).fetchall()
else: # book name cose
books = db.execute("SELECT * FROM books WHERE title LIKE :srch ", {"srch":search}).fetchall()
return render_template("search.html", books=books, name = name)
另外,这里是 HTML 部分:
<form action="{{ url_for('search', name ) }}" method="post">
我没有在其他地方调用函数search。那为什么还抱怨名字不通过呢?
HTML 来自 python 代码,如下所示:
@app.route("/LoggedOn",methods=["GET", "POST"])
def LoggedOn(name):
return render_template("LoggedOn.html", name=name)
@app.route("/registeration", methods=["GET","POST"])
def registeration():
if request.method == "POST":
name = request.form.get("uname")
password = request.form.get("psw")
users = db.execute("SELECT * FROM users WHERE name=:name", {"name":name}).fetchall()
if users != []:
return render_template("error-register.html")
user = MyUser(name,password)
user.add_to_db(db)
return LoggedOn(name)
所以registeration 函数的名称传递给LoggedOn,然后它传递给loggedon.html,然后通过使用url_for 传递给搜索函数,如上所述。究竟缺少什么?
【问题讨论】: