序章
localeURL の使用について質問があります。次のようなURLを使用すると、すべてがうまく機能します: http://www.example.com/
アドレスバーにhttp://www.example.com/と入力 すると、たとえばhttp://www.example.com/ en/に正しく変換されます。
ビュー change_locale を使用しても問題ありません (つまり、www.example.com/ en / を www.example.com/ fr / に変更します)。
問題
しかし、私のアプリケーションは mod_wsgi を使用してサーバーとして apache を使用しています。httpd.conf スクリプトには、次の行が含まれています。
WSGIScriptAlias /MY_PREFIX /path/to/django/app/apache/django.wsgi
次のような URL が得られます:
http://www.example.com/MY_PREFIX/
- アドレス バーにhttp://www.example.com/MY_PREFIX/と入力すると、期待される結果がhttp://www.exampleになるはずのアドレスがhttp://www.example.com/en/に変わります。 com/MY_PREFIX/en/
change_locale ビューでも同じ問題が発生しました。このプレフィックスを管理するために、このコードを変更しました (settings.SERVER_PREFIX に保存)。
def change_locale(request) :
"""
Redirect to a given url while changing the locale in the path
The url and the locale code need to be specified in the
request parameters.
O. Rochaix; Taken from localeURL view, and tuned to manage :
- SERVER_PREFIX from settings.py
"""
next = request.REQUEST.get('next', None)
if not next:
next = request.META.get('HTTP_REFERER', None)
if not next:
next = settings.SERVER_PREFIX + '/'
next = urlsplit(next).path
prefix = False
if settings.SERVER_PREFIX!="" and next.startswith(settings.SERVER_PREFIX) :
prefix = True
next = "/" + next.lstrip(settings.SERVER_PREFIX)
_, path = utils.strip_path (next)
if request.method == 'POST':
locale = request.POST.get('locale', None)
if locale and check_for_language(locale):
path = utils.locale_path(path, locale)
if prefix :
path = settings.SERVER_PREFIX + path
response = http.HttpResponseRedirect(path)
return response
このカスタマイズされたビューを使用すると、言語を正しく変更できますが、それが正しい方法かどうかはわかりません。
質問
httpd.conf で WSGIScriptAlias を /PREFIX (つまり "/Blog") で使用する場合、python 側で WSGIScriptAlias に一致する変数 (ここでは settings.SERVER_PREFIX) を使用する必要がありますか? 私はMEDIA_URLなどに使用していますが、Python側でこれを管理することなく「自動的に」機能させるために、いくつかの設定を行う必要があるかもしれません
このカスタマイズされたビュー (change_locale) は、この問題を管理する正しい方法だと思いますか? それとも、1. に関してはある種の自動魔法のようなものがありますか?
アドレスバーにアドレス ( http://www.example.com/MY_PREFIX/ )を入力しても問題は解決しません。カスタマイズが進むべき道なら、これも変更しますが、もっと良い解決策があると思います!