可变网址,并将非输入值从html传递到Python(Flask)

时间:2019-06-03 04:51:59

标签: python html python-3.x flask

根据this question,您只能使用POST将数据从html的输入表单发送到Python。我试图弄清楚如何将值(实际上是最初包含在我从Python传入的字典中的值)从html传递到Python。

我考虑过的两种方法(但尚未弄清楚如何成功完成):

  1. 看看Flask quickstart,这应该很简单。我只是不确定在HTML端传递此parkCode的语法是什么样。
@app.route('/park/<parkCode>', methods =['GET', 'POST'])
def park(parkCode):
    return render_template('park.html', parkCode = parkCode)
  1. 或者,是否有某种方法可以使用输入表单将html字符串简单地发送到Python 而不?我还没有找到一种方法来做到这一点。

作为参考,这是我通过“ 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代码。

1 个答案:

答案 0 :(得分:1)

  1. .route装饰器始终仅处理URL路径。由于form action是HTML中的静态值,因此更改它的唯一方法是使用JavaScript(例如,通过在提交时更改action属性)。如果您要使用JavaScript,那么最好还是使用JavaScript提交请求本身,这将导致我们

  2. 是的,您可以使用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>