Cree URL dinámicas en matraz con url_for ()


184

La mitad de mis rutas Flask requiere una variable decir, /<variable>/addo /<variable>/remove. ¿Cómo creo enlaces a esas ubicaciones?

url_for() toma un argumento para que la función se enrute pero no puedo agregar argumentos.

Respuestas:


283

Toma argumentos de palabras clave para las variables:

url_for('add', variable=foo)

12
lo que significa que la función es def add(variable)?
endolito

55
@endolith, sí. ** kwargs pasados ​​a url_forpasarán como parámetros de función para rutas de reglas variables en Flask
highvolt

3
Pero el problema es cómo 'foo' está más allá del alcance si es una variable de Python. Entonces, ¿cómo lo resuelves?

1
Solo para que sea más claro, si tiene @app.route("/<a>/<b>")y def function(a,b): ...como su función, entonces debe usar url_fory especificar sus argumentos de palabras clave de esta manera:url_for('function', a='somevalue', b='anothervalue')
jarrettyeo

120

url_forin Flask se usa para crear una URL para evitar la sobrecarga de tener que cambiar las URL en una aplicación (incluidas las plantillas). Sin url_for, si hay un cambio en la URL raíz de su aplicación, entonces debe cambiarlo en cada página donde está presente el enlace.

Sintaxis: url_for('name of the function of the route','parameters (if required)')

Se puede usar como:

@app.route('/index')
@app.route('/')
def index():
    return 'you are in the index page'

Ahora, si tiene un enlace a la página de índice: puede usar esto:

<a href={{ url_for('index') }}>Index</a>

Puedes hacer muchas cosas con él, por ejemplo:

@app.route('/questions/<int:question_id>'):    #int has been used as a filter that only integer will be passed in the url otherwise it will give a 404 error
def find_question(question_id):  
    return ('you asked for question{0}'.format(question_id))

Para lo anterior podemos usar:

<a href = {{ url_for('find_question' ,question_id=1) }}>Question 1</a>

¡Así puedes pasar los parámetros!


1
Tengo una pregunta, en el primer ejemplo, el método de índice se pasó como una cadena mientras que en el segundo método, find_question se pasa como variable. ¿Por qué?
आनंद

1
@AnandTyagi ¿Es esto lo que quieres decir? Enrutamiento de URL
Tony Chou

3
@ आनंद si variable lo haces: {{ url_for('find_question' ,question_id=question.id) }}y no{{ url_for('find_question' ,question_id={{question.id}}) }}
Abdur-Rahmaan Janhangeer


1

Plantillas:

Pase el nombre de la función y el argumento.

<a href="{{ url_for('get_blog_post',id = blog.id)}}">{{blog.title}}</a>

Ver, función

@app.route('/blog/post/<string:id>',methods=['GET'])
def get_blog_post(id):
    return id
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.