Flask'ta url_for () ile dinamik URL'ler oluşturun


184

Flask rotalarımın yarısı değişken bir deyiş gerektirir /<variable>/addveya /<variable>/remove. Bu konumlara nasıl bağlantı oluştururum?

url_for() işlevin yönlendirilmesi için bir bağımsız değişken alır, ancak bağımsız değişken ekleyemiyorum?

Yanıtlar:


283

Değişkenler için anahtar kelime bağımsız değişkenleri alır:

url_for('add', variable=foo)

12
yani fonksiyon nedir def add(variable)?
endolith

5
@endolith, Evet. ** kwargs geçirilen url_forFlask değişken kural rotalar için fonksiyon parametreleri olarak geçecek
HIGHVOLT

3
Ancak sorun, Python'dan bir değişken olması durumunda 'foo'nun kapsamın ötesinde olmasıdır. O zaman, bunu nasıl çözersin?

1
Daha açık olması için, eğer varsa @app.route("/<a>/<b>")ve def function(a,b): ...işlevi olarak, o zaman url_forbunun gibi anahtar kelime argümanlarını kullanmalı ve belirtmelisiniz:url_for('function', a='somevalue', b='anothervalue')
jarrettyeo

120

url_forin Flask, bir uygulama boyunca (şablonlar dahil) URL'leri değiştirmek zorunda kaldığınız yükü önlemek için bir URL oluşturmak amacıyla kullanılır. Olmadan url_for, uygulamanızın kök URL'sinde bir değişiklik varsa, bağlantının bulunduğu her sayfada bunu değiştirmeniz gerekir.

Sözdizimi: url_for('name of the function of the route','parameters (if required)')

Şu şekilde kullanılabilir:

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

Şimdi bir dizin varsa dizin sayfası: bunu kullanabilirsiniz:

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

Bununla çok fazla şey yapabilirsiniz, örneğin:

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

Yukarıdakiler için kullanabiliriz:

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

Bunun gibi parametreleri kolayca iletebilirsiniz!


1
Bir soru var, ilk örnekte, ikinci yöntemde find_question değişken olarak geçiriliyorken, dizin yöntemi bir dize olarak geçirildi. Neden?
आनंद

1
@AnandTyagi Bunu mu demek istediniz? URL yönlendirme
Tony Chou

3
@ Variable değişken yaparsanız: {{ url_for('find_question' ,question_id=question.id) }}ve değil{{ url_for('find_question' ,question_id={{question.id}}) }}
Abdur-Rahmaan Janhangeer

38

Aşağıdakiler için Flask API belgesine bakınflask.url_for()

Şablonunuza js veya css bağlamak için kullanılan diğer örnek snippet'ler aşağıdadır.

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

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

1

Şablonlar:

İşlev adını ve bağımsız değişkeni iletme.

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

Görünüm, işlev

@app.route('/blog/post/<string:id>',methods=['GET'])
def get_blog_post(id):
    return id
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.