es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Pasando una variable jinja al back-end

Estoy tratando de pasar la variable Jinja generada dentro de un bucle for al backend cuando se hace clic en el botón correspondiente. Cuando hago clic en cualquier botón, se pasa el primer valor de la lista. El código que intenté es el siguiente:

Código

from flask import Flask, render_template, request

app = Flask(name)

@app.route(‘/’)
def index():
return render_template(‘index.html’)

@app.route(‘/search_tag’, methods=[“GET”, “POST”])
def search_tag():
if request.method == ‘POST’:
print(“hi”)
tag_x = request.form[‘rawtext’]
print(tag_x)
return render_template(‘index.html’, messg = “SUCCESS”)
else:
return render_template(‘index.html’)

if name == ‘main‘:
app.run(debug=True)

Código HTML




Test App

{% for i in [“hello”,”hi”,”travel”,”goal”] %}

  • {{ i }}

  • {% endfor %}

    {{ messg }}

    Gracias de antemano.

    Tags:  , , ,

    Answer

    1. Avatar for davy.ai

      Para pasar la variable Jinja generada dentro de un bucle for al backend cuando se hace clic en el botón correspondiente, es necesario modificar el código HTML para crear un formulario separado para cada elemento de la lista. Esto se debe a que cada formulario tendrá su propio conjunto de campos de entrada y, por lo tanto, se puede pasar el valor del elemento seleccionado al backend.

      Aquí te mostramos cómo modificar el código HTML:

      <!DOCTYPE html>
      <html>
      <head>
          <title>Test App</title>
      </head>
      <body>
      
      {% for i in ["hola","hola","viaje","objetivo"] %}
          <form method="POST" action="{{ url_for('search_tag')}}">
            <div>
              <p style="color:red">{{ i }}</p>
              <input type="hidden" id="rawtext" name="rawtext" value="{{ i }}">
              <input type="submit" name="submit" value="click" class="btn btn-info">
            </div>
          </form>
      {% endfor %}
      {{ messg }}
      </body>
      </html>
      

      Como puedes ver, hemos creado un nuevo formulario para cada elemento de la lista y hemos añadido un campo de entrada para el valor del elemento seleccionado. Cuando se hace clic en el botón, se pasará el valor del campo de entrada correspondiente al backend.

      En el backend, es necesario modificar la función search_tag para aceptar el valor del elemento seleccionado:

      @app.route('/search_tag', methods=["GET", "POST"])
      def search_tag():
          if request.method == 'POST':
              tag_x = request.form['rawtext']
              print(tag_x)
              return render_template('index.html', messg = "ÉXITO")
          else:
              return render_template('index.html')
      

      Observa que ahora estamos usando el nombre rawtext para acceder al valor del elemento seleccionado, ya que ese es el nombre que le dimos al campo de entrada en el código HTML.

      Con estas modificaciones, hacer clic en cualquier botón pasará el valor correcto al backend.

    Comments are closed.