python - route - send_file flask
Crear argumentos dinĂ¡micos para url_for en Flask (2)
Tengo una plantilla jinja2 que reutilizo para diferentes rutas de Flask.
Todas estas rutas tienen un solo parámetro requerido y manejan solo las solicitudes
GET
, pero algunas rutas pueden tener argumentos adicionales.
¿Hay alguna manera de agregar argumentos adicionales en
url_for()
?
Algo como
url_for(my_custom_url, oid=oid, args=extra_args)
que se representará en (según el punto final de la ruta):
# route ''doit/<oid>'' with arguments
doit/123?name=bob&age=45
# route ''other/<oid>'' without arguments
other/123
Mi caso de uso sería proporcionar enlaces con argumentos de consulta predefinidos:
<a href=" {{ url_for(''doit'', oid=oid, args=extra_args }} ">A specific query</a>
<a href=" {{ url_for(''other'', oid=oid) }} ">A generic query</a>
Me gustaría ejecutar esta plantilla sin JavaScript, por lo que no me gustaría asignar un escucha de clics y usar AJAX para hacer una solicitud
GET
para cada enlace si es posible.
Cualquier argumento que no coincida con los parámetros de ruta se agregará como la cadena de consulta.
Suponiendo que
extra_args
es un dict, simplemente descomprímelo.
extra_args = {''hello'': ''world''}
url_for(''doit'', oid=oid, **extra_args)
# /doit/123?hello=world
url_for(''doit'', oid=oid, hello=''davidism'')
# /doit/123?hello=davidism
Luego acceda a ellos en la vista con
request.args
:
@app.route(''/doit/<int:oid>'')
def doit(oid)
hello = request.args.get(''hello'')
...
Usando su ejemplo, esta herida genera las URL como solicitó si conoce sus argumentos de antemano.
<a href=" {{ url_for(''doit'', oid=oid, name=''bob'', age=45 }} ">A specific query</a>
<a href=" {{ url_for(''other'', oid=oid) }} ">A generic query</a>
La respuesta de @ davidism sería preferible si su conjunto de argumentos no se conoce hasta el tiempo de ejecución y se almacenan en un diccionario.