#python #html #forms #flask #jinja2
Вопрос:
Я работаю с Фляжкой. У меня есть один маршрут, и я хочу перенаправить его на другой маршрут при нажатии кнопки, но я хочу передать аргумент. Это мой маршрут:
@app.route('/actualize_product.html', methods=['GET', 'POST'])
def actualize_product():
if request.method == 'POST':
print("post")
query1 = """
SELECT id FROM BD.producto
WHERE id=""" str(request.form['product_id'])
conection = connect()
resultt = conection.execute(query1)[0]
print(resultt)
return redirect(url_for('/edit_product.html', resultado = resultt)) #Line where I'm redirecting
query = "SELECT * FROM BD.Producto ALLOW FILTERING; "
conection = connect()
result = conection.execute(query)
return render_template('actualize_product.html', products = result)
И это тот маршрут, который я хочу, чтобы он был перенаправлен
@app.route('/edit_product.html', methods=['GET', 'POST'])
def edit_product():
print("edit")
if request.method == 'POST':
print("Im already here")
return render_template('edit_product.html')
Проблема в том, что edit_product.html это файл, в котором я использую jinja2
<h2>Id del producto: {{resultado.id}} </h2> <br>
<form action="app.py" method="get" onsubmit="return formEsValido()">
<input type= "hidden" value = "{{resultado.id}}" id = "id" name = "id">
<label for="product_name"> Nuevo nombre del Producto: </label>
<input type="text" name="product_name" id="product_name" class="form-control">
<label for="product_price"> Nuevo precio del Producto: </label>
<input type="text" name="product_price" id="product_price" class="form-control">
<label for="descripction"> Nueva descripcion del Producto: </label>
<input type="text" name="description" id="description" class="form-control">
<label for="stock">Nuevo stock del Producto</label>
<input type="text" name="stock" id="stock" class="form-control">
<br>
<button class="btn btn-primary"id="index-buttons" type="submit">Editar Producto</button>
</form>
</div>
Если я использую render_template вместо перенаправления, это не сработает, потому что после нажатия на эту кнопку маршрут будет /actualize_product.html и я хочу, чтобы он изменился на /edit_product.html» поскольку у меня там есть форма, я не знаю, как передать эту переменную под названием «resultado» в jinja2 с помощью перенаправления.
Ответ №1:
Если все, что вам нужно, — это идентификатор, вы можете передать его в качестве параметра url.
@app.route('/actualize')
def actualize():
return redirect(url_for('edit', id=123))
@app.route('/edit')
def edit():
id = request.args.get('id')
return render_template('edit.html', id=id)