Crea URL dinamici in Flask con url_for ()


183

La metà delle mie rotte Flask richiede una variabile dire, /<variable>/add o /<variable>/remove. Come posso creare collegamenti a tali posizioni?

url_for() accetta un argomento per il routing della funzione ma non riesco ad aggiungere argomenti?

Risposte:


282

Prende argomenti di parole chiave per le variabili:

url_for('add', variable=foo)

12
significa che la funzione è def add(variable)?
endolith

5
@endolith, Sì. ** I kwarg passati a url_forpasseranno come parametri di funzione per le rotte delle regole variabili in Flask
highvolt

3
Ma il problema è come 'pippo' va oltre lo scopo se è una variabile di Python. Quindi, come lo risolvi?

1
Solo in modo che sia più chiaro, se hai @app.route("/<a>/<b>")e def function(a,b): ...come sua funzione, allora dovresti usare url_fore specificare i suoi argomenti di parole chiave in questo modo:url_for('function', a='somevalue', b='anothervalue')
jarrettyeo,

120

url_forin Flask viene utilizzato per la creazione di un URL per evitare il sovraccarico di dover modificare gli URL in un'applicazione (inclusi i modelli). Senzaurl_for , se c'è una modifica nell'URL radice della tua app, devi cambiarla in ogni pagina in cui è presente il collegamento.

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

Può essere usato come:

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

Ora se hai un link nella pagina dell'indice: puoi usare questo:

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

Puoi fare molte cose con esso, ad esempio:

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

Per quanto sopra possiamo usare:

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

In questo modo puoi semplicemente passare i parametri!


1
Ho una domanda, nel primo esempio, il metodo index è stato passato come una stringa mentre nel secondo metodo, find_question viene passato come variabile. Perché?
आनंद

1
@AnandTyagi È questo che vuoi dire? Instradamento URL
Tony Chou,

3
@ आनंद se variabile fai: {{ url_for('find_question' ,question_id=question.id) }}e non{{ url_for('find_question' ,question_id={{question.id}}) }}
Abdur-Rahmaan Janhangeer,

38

Fare riferimento al documento API Flask perflask.url_for()

Di seguito sono riportati altri frammenti di esempio di utilizzo per il collegamento di js o css al modello.

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

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

1

Modelli:

Passa il nome e l'argomento della funzione.

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

View, la funzione

@app.route('/blog/post/<string:id>',methods=['GET'])
def get_blog_post(id):
    return id
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.