根据this question,您只能使用POST
将数据从html的输入表单发送到Python。我试图弄清楚如何将值(实际上是最初包含在我从Python传入的字典中的值)从html传递到Python。
我考虑过的两种方法(但尚未弄清楚如何成功完成):
parkCode
的语法是什么样。@app.route('/park/<parkCode>', methods =['GET', 'POST'])
def park(parkCode):
return render_template('park.html', parkCode = parkCode)
作为参考,这是我通过“ parks”字典发送的行:
return render_template('search_results.html', parks=parks)
然后,在我的search_results.html
文件中:
{% for park in parks %}
<div method = "POST" action = "/park"><a href="park.html">{{park["fullName"]}}</a></div>
{% endfor %}
但是我希望将park["fullName"]
发送到我的Python代码。
答案 0 :(得分:1)
.route
装饰器始终仅处理URL路径。由于form action
是HTML中的静态值,因此更改它的唯一方法是使用JavaScript(例如,通过在提交时更改action
属性)。如果您要使用JavaScript,那么最好还是使用JavaScript提交请求本身,这将导致我们
是的,您可以使用AJAX发送请求。从ES6开始,最简单的方法是fetch
。是否使用表单或是否使用AJAX取决于您希望在请求后发生的事情:提交的表单会导致呈现新页面,而AJAX请求无法更改当前页面,只能触发JavaScript代码(虽然显然可以根据需要在JavaScript中更改页面。)
基本上,没有JavaScript,您将无法做自己想做的事情。在没有JavaScript的情况下无法工作的第三个选项是使用原本应使用的形式。在flask
方面,它不涉及在路由内部命名参数,而是使用request.args
(对于GET
形式)或request.form
(对于POST
形式):
@app.route('/park', methods =['POST'])
def park():
parkCode = request.form.get('parkCode')
return render_template('park.html', parkCode = parkCode)
以及随附的HTML:
<form action="/park" method="POST">
<input name="parkCode"/>
<input type="submit" value="Submit"/>
</form>