Créez des URL dynamiques dans Flask avec url_for ()


184

La moitié de mes routes Flask nécessite une variable, disons, /<variable>/addou/<variable>/remove . Comment créer des liens vers ces emplacements?

url_for() prend un argument pour la fonction à acheminer mais je ne peux pas ajouter d'arguments?

Réponses:


283

Il prend des arguments de mot-clé pour les variables:

url_for('add', variable=foo)

12
signifiant que la fonction est def add(variable)?
endolith

5
@endolith, oui. ** Les kwargs passés à url_forpasseront en tant que paramètres de fonction pour les routes de règles variables dans Flask
highvolt

3
Mais le problème est de savoir comment «foo» dépasse la portée s'il s'agit d'une variable de Python. Alors, comment le résolvez-vous?

1
Juste pour que ce soit plus clair, si vous avez @app.route("/<a>/<b>")et def function(a,b): ...comme sa fonction, alors vous devez utiliser url_foret spécifier ses arguments de mot-clé comme ceci:url_for('function', a='somevalue', b='anothervalue')
jarrettyeo

120

url_forin Flask est utilisé pour créer une URL afin d'éviter la surcharge liée à la modification des URL dans une application (y compris dans les modèles). Sans pour autanturl_for , s'il y a un changement dans l'URL racine de votre application, vous devez le changer dans chaque page où le lien est présent.

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

Il peut être utilisé comme:

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

Maintenant, si vous avez un lien vers la page d'index: vous pouvez utiliser ceci:

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

Vous pouvez faire beaucoup de choses avec, par exemple:

@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))

Pour ce qui précède, nous pouvons utiliser:

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

Comme ça, vous pouvez simplement passer les paramètres!


1
J'ai une question, dans le premier exemple, la méthode d'index a été passée sous forme de chaîne tandis que dans la deuxième méthode, la question find_question est passée en tant que variable. Pourquoi?
आनंद

1
@AnandTyagi C'est ce que tu veux dire? URL routing
Tony Chou

3
@ आनंद si vous faites une variable: {{ url_for('find_question' ,question_id=question.id) }}et non{{ url_for('find_question' ,question_id={{question.id}}) }}
Abdur-Rahmaan Janhangeer

38

Reportez-vous au document Flask API pourflask.url_for()

Vous trouverez ci-dessous d'autres exemples d'utilisation de la liaison js ou css à votre modèle.

<script src="{{ url_for('static', filename='jquery.min.js') }}"></script>

<link rel=stylesheet type=text/css href="{{ url_for('static', filename='style.css') }}">

1

Modèles:

Transmettez le nom et l'argument de la fonction.

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

Vue, fonction

@app.route('/blog/post/<string:id>',methods=['GET'])
def get_blog_post(id):
    return id
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.