Crear argumentos dynamics para url_for en Flask.

Tengo una plantilla jinja2 que reutilizo para diferentes rutas de Flask. Todas estas rutas tienen un único parámetro requerido y manejan solo las solicitudes GET , pero algunas rutas pueden tener argumentos adicionales.

¿Hay alguna manera de agregar argumentos adicionales a url_for() ?


Algo como

 url_for(my_custom_url, oid=oid, args=extra_args) 

que se procesará en (según el punto final de la ruta):

 # route 'doit/' with arguments doit/123?name=bob&age=45 # route 'other/' without arguments other/123 

Mi caso de uso sería proporcionar enlaces con argumentos de consulta predefinidos:

 A specific query A generic query 

Me gustaría ejecutar esta plantilla sin JavaScript, por lo que no me gustaría asignar un detector de clics y usar AJAX para hacer una solicitud GET para cada enlace si eso 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ímalo.

 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 accede a ellos en la vista con request.args :

 @app.route('/doit/') 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 specific query A generic query 

Se preferiría la respuesta de @ davidism si su conjunto de argumentos no se conoce hasta el tiempo de ejecución y se almacenan en un diccionario.