Я пытаюсь передать аргумент из HTML кода в python flask код, но когда я это получаю, я получаю ошибку:
TypeError: search () отсутствует 1 требуемый позиционный Аргумент: 'name'
Вот фрагмент кода:
@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
, как указано выше. Чего точно не хватает?