3

私は多言語ウェブサイトを開発しています。ページには次のような URI があります。

/RU/about

/EN/about

/IT/about

/JP/about

/EN/contacts

そしてjinja2テンプレートで私は書きます:

<a href="{{ url_for('about', lang_code=g.current_lang) }}">About</a>

すべてのurl_for呼び出しで lang_code=g.current_lang を記述する必要があります。

暗黙的に渡すことは可能lang_code=g.current_langですか? url_forそして書くだけ {{ url_for('about') }}

私のルーターは次のようになります。

@app.route('/<lang_code>/about/')
def about():
...
4

1 に答える 1

4

app.url_defaultsURL を作成するときにデフォルト値を提供するために使用します。app.url_value_preprocessorURL から値を自動的に抽出するために使用します。これは、url プロセッサに関するドキュメントで説明されています。

@app.url_defaults
def add_language_code(endpoint, values):
    if 'lang_code' in values:
        # don't do anything if lang_code is set manually
        return

    # only add lang_code if url rule uses it
    if app.url_map.is_endpoint_expecting(endpoint, 'lang_code'):
        # add lang_code from g.lang_code or default to RU
        values['lang_code'] = getattr(g, 'lang_code', 'RU')

@app.url_value_preprocessor
def pull_lang_code(endpoint, values):
    # set lang_code from url or default to RU
    g.lang_code = values.pop('lang_code', 'RU')

url_for('about')が生成され、URL にアクセスする/RU/aboutg.lang_code自動的に RU に設定されます。


Flask-Babelは、言語を処理するためのより強力なサポートを提供します。

于 2015-11-18T15:03:27.733 に答える