url_for()を使用してFlaskに動的URLを作成する


183

私のFlaskルートの半分は、変数、/<variable>/addまたはを必要とします/<variable>/remove。これらの場所へのリンクを作成するにはどうすればよいですか?

url_for() 関数のルーティング先の引数を1つ取りますが、引数を追加できませんか?

回答:


282

変数のキーワード引数を取ります:

url_for('add', variable=foo)

12
関数がdef add(variable)
内部石2015

5
@endolith、はい。**渡されたkwargsはurl_for、Flaskの可変ルールルートの関数パラメーターとして渡されます
highvolt

3
しかし問題は、 'foo'がPythonからの変数である場合、どのように範囲外であるかです。では、どうやってそれを解決しますか?

1
ただ、それが明確であることを、あなたが持っている場合@app.route("/<a>/<b>")def function(a,b): ...、その機能として、あなたが使用する必要がありますurl_forと、このようにそのキーワード引数を指定:url_for('function', a='somevalue', b='anothervalue')
jarrettyeo

120

url_forFlaskは、アプリケーション全体(テンプレートを含む)でURLを変更するオーバーヘッドを防ぐためにURLを作成するために使用されます。なしでurl_for、アプリのルートURLに変更がある場合は、リンクが存在するすべてのページで変更する必要があります。

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

次のように使用できます。

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

インデックスページへのリンクがある場合、これを使用できます。

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

あなたはそれを使ってたくさんのことをすることができます、例えば:

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

上記の場合、以下を使用できます。

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

このように、単にパラメーターを渡すことができます!


1
最初の例では、indexメソッドが文字列として渡されましたが、2番目のメソッドでは、find_questionが変数として渡されています。どうして?
आनंद

1
@AnandTyagiこれはどういう意味ですか?URLルーティング
Tony Chou

3
@आनंद変数を使用する場合:{{ url_for('find_question' ,question_id=question.id) }}しない{{ url_for('find_question' ,question_id={{question.id}}) }}
Abdur-Rahmaan Janhangeer

38

Flask APIドキュメントを参照しください。flask.url_for()

jsまたはcssをテンプレートにリンクするための使用法のその他のサンプルスニペットを以下に示します。

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

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

1

テンプレート:

関数名と引数を渡します。

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

ビュー、機能

@app.route('/blog/post/<string:id>',methods=['GET'])
def get_blog_post(id):
    return id
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.