3

私はFlaskで遊び始めたばかりなので、明らかなことを見落としている可能性が非常に高いですが、他の人が同じ答えを探すのに良い質問になるかもしれません:)

多言語 URL をリッスンする Flask アプリを作成したいと考えています。つまり、1 つのエンドポイントが /naujiena/111 (リトニア語など) と同じように /news/111 をリッスンするようにする必要があります。

したがって、明らかな解決策の 1 つは、次のようにビュー関数へのルートをいくつか与えることです。

@app.route('/news/<id>')
@app.route('/naujiena/<id>')
def news_view(id): pass

これは機能するはずですが、後で新しい言語を追加したり、リンクを更新したりするのは(親密な場所で)明らかに苦痛です。

私が考えているもう1つの解決策は、実際のビュー関数を定義する1つのファイルと、リクエストを取得してから他のファイルから実際のビュー関数をクエリする「言語ビュー」ファイルをいくつか作成できることです。お気に入り

ニュース.py

def news_view(id): pass

news_ja.py

from news import news_view
@app.route('/news/<id>')
def news_view_en(id):
    return news_view(id)

news_lt.py

from news import news_view
@app.route('/naujiena/<id>')
def news_view_lt(id):
    return news_view(id)

これは悪いことではありません。しかし、私が見逃しているものがあるはずです:) それで、みんな、それは何ですか? :) どんな提案も大歓迎です。

ありがとう!

4

1 に答える 1

4

add_url_rule()URL を動的にルーティングする関数を使用できます。

view_functions = [news_view, foo_view, bar_view]

for view in ['news', 'foo', 'bar']:
  for translation in translations[view]:
     app.add_url_rule('/{}/'.format(translation), view, view_functions[view])
于 2012-08-05T07:41:19.240 に答える