我正在尝试使用 url_for 将值作为参数传递,但是我遇到了一些问题,因为我首先通过函数加载了一些数据,然后使用 构造手动插入了一些数据。我该怎么办?
<td align = "center"> <a href = "{{url_for ('insertResults', idGia = attribute [0], language = attribute [4], level = attribute [5], info = info, written = written, oral = oral, session = session)}} "type =" submit "class =" btn btn-primary "> Insert </td>
其中信息、书面和口头是通过以下方式作为输入输入的数据:
<td align = "center"> <input type = "text" placeholder = "100" id = "info" name = "info" /> </td>
<td align = "center"> <input type = "text" placeholder = "100" id = "written" name = "written" /> </td>
<td align = "center"> <input type = "text" placeholder = "100" id = "oral" name = "oral" /> </td>
答案 0 :(得分:0)
url_for
函数在服务器端执行。无法将参数从表单字段传递给 this。
您确定要为此使用 GET 请求吗?在我看来,POST 请求在您的情况下更有意义。
以下示例向您展示了不同的方法,您可以使用这些方法通过 POST 请求传输变量并在您的路由中查询它们。数据主要在请求正文中找到它们的位置。只有名称为“attr0”的属性会在 url 中发送。
<form action="{{ url_for('indert_results', attr0=attr[0]) }}" method="POST">
<input type="hidden" name="val0" value="{{ attr[1] }}" />
<input type="text" name="val1" />
<input type="text" name="val2" />
<button type="submit">Submit</button>
</form>
@app.route('/insert-results/<int:attr0>', methods=['POST'])
def insert_results(attr0):
val0 = request.form['val0']
val1 = request.form.get('val1')
val2 = request.form.get('val1', 'default-value1')
print(
f'attribs: {attr0}',
f'values: {val0}, {val1}, {val2}',
sep='\n'
)
# ...
如果您确实坚持 GET 请求,我仍然建议您使用表单,以便您可以将表单字段中的条目作为查询参数传输。 所有数据都在 url 的不同部分传输。查询参数以“?param0=value0¶m1=value1”的形式添加到url中。
<form action="{{ url_for('insert_results', attr0=attr[0], attr1=attr[1]) }}" method="GET">
<input type="text" name="param0" />
<input type="text" name="param1" />
<input type="text" name="param2" />
<button type="submit">Submit</button>
</form>
@app.route('/insert-results/<int:attr0>-<str:attr1>', methods=['GET'])
def insert_results(attr0, attr1):
param0 = request.args['param0']
param0 = request.args.get('param1')
param1 = request.args.get('param2', 'default-value2')
print(
f'attribs: {attr0}, {attr1}',
f'params: {param0}, {param1}, {param2}'
sep='\n'
)
# ...
无论您是使用表单还是请求 url 中的参数,您都使用一种字典,它允许您使用 .get(key [, default] [, type = <func_ptr>])
来确保绕过 KeyError
,这是一个默认值被传递,并且可能转换了值的类型。
明智地选择传输方法并考虑数据对第三方的可见性,同时考虑到以后可能会以加密形式进行传输。您还应该考虑要发送的数据量。您想要传输的数据越多,您就越快切换到 POST 请求。
特别是多条数据记录是单独传输的,以后可以想到用ajax传输。然而,这是一个更复杂的解决方案,在这一点上的解释会过分。