¿Cómo pasar una variable entre las páginas de Flask?

2 minutos de lectura

Supongamos que tengo el siguiente caso;

@app.route('/a', methods=['GET'])
def a():
  a = numpy.ones([10,10])
  ...
  return render_template(...) # this rendered page has a link to /b

@app.route('/b', methods=['GET'])
def b():
  print a
  ....

En la página roja hay un enlace que dirige la página /a a /b. Intento pasar la variable a a la página /b para reutilizarla. ¿Cómo debo hacer esta aplicación Flask? ¿Necesito usar la sesión o hay alguna otra solución?

¿Como pasar una variable entre las paginas de Flask
davidismo

Si desea pasar algún valor de Python que el usuario no necesita ver o controlar, puede usar la sesión:

@app.route('/a')
def a():
    session['my_var'] = 'my_value'
    return redirect(url_for('b'))

@app.route('/b')
def b():
    my_var = session.get('my_var', None)
    return my_var

La sesión se comporta como un dictado y se serializa en JSON. Entonces puede poner cualquier cosa que sea JSON serializable en la sesión. Sin embargo, tenga en cuenta que la mayoría de los navegadores no admiten una cookie de sesión de más de ~4000 bytes.

Debe evitar poner grandes cantidades de datos en la sesión, ya que debe enviarse hacia y desde el cliente en cada solicitud. Para grandes cantidades de datos, utilice una base de datos u otro almacenamiento de datos. Consulte ¿Las variables globales son seguras para subprocesos en el matraz? ¿Cómo comparto datos entre solicitudes? y almacenar grandes cantidades de datos o una conexión de servicio por sesión de Flask.


Si desea pasar un valor de una plantilla en una URL, puede usar un parámetro de consulta:

<a href="https://stackoverflow.com/questions/27611216/{{%20url_for("b', my_var="my_value") }}">Send my_value</a>

producirá la url:

/b?my_var=my_value

que se puede leer de b:

@app.route('/b')
def b():
    my_var = request.args.get('my_var', None)

El enlace a la ruta /b en la plantilla para /a podría tener parámetros de consulta agregados, que podría leer en la ruta para /b. Alternativamente, puede almacenar el valor de a en una variable de sesión para acceder a ella entre vistas.

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad