ユーザーが英語を選択した場合にのみ、このURLを書き込む必要があるという要件がありますwww.example.com/something/something/
。www.example.com/en/something/something/
これは、通常の部分のURLが実行されたdjangoですでに実行されている既存のサイト用です。ユーザーが英語を選択した場合は、URLを書き直す必要があります。
djangoテンプレートのすべてのURLを手動で変更できると思いました
{% if request.session.language == 'en' %}
<a href="/en/something"..>
{% else %}
<a href="/something"..>
{% endif %}
しかし、リンクの数が多すぎてこの方法で実行できないため、そのように実行しないように求められました。
次に、カスタムミドルウェアを試してみることを考えました。このミドルウェアでは、リクエストオブジェクトにアクセスしprocess_request
て、return HttpResponsePermanentRedirect(redirect_url)
しかしprocess_request
、画像やその他のリンクを含め、すべてのリクエストを1つずつ処理しているようです。しかし、私が欲しいのは最初のリクエスト、つまりリクエストされた実際のURLです。
そこで、ミドルウェアのコンストラクターで同じことを試しました。これは、1回だけ呼び出され、それが最初の要求になることを期待しています。しかし、私が直面している問題は、オブジェクト__init__
のみを受け入れself
、**args
オブジェクトを受け入れないrequest
ため、そこでセッション変数にアクセスできないことです。
これをapacheで試すことを考えましたが、ユーザーが英語を選択した場合にのみURLリダイレクトを実行する必要がありますが、常にそうとは限りません。