8

序章

localeURL の使用について質問があります。次のようなURLを使用すると、すべてがうまく機能します: http://www.example.com/

問題

しかし、私のアプリケーションは mod_wsgi を使用してサーバーとして apache を使用しています。httpd.conf スクリプトには、次の行が含まれています。

WSGIScriptAlias /MY_PREFIX /path/to/django/app/apache/django.wsgi

次のような URL が得られます:
http://www.example.com/MY_PREFIX/

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

このカスタマイズされたビューを使用すると、言語を正しく変更できますが、それが正しい方法かどうかはわかりません。

質問

  1. httpd.conf で WSGIScriptAlias を /PREFIX (つまり "/Blog") で使用する場合、python 側で WSGIScriptAlias に一致する変数 (ここでは settings.SERVER_PREFIX) を使用する必要がありますか? 私はMEDIA_URLなどに使用していますが、Python側でこれを管理することなく「自動的に」機能させるために、いくつかの設定を行う必要があるかもしれません

  2. このカスタマイズされたビュー (change_locale) は、この問題を管理する正しい方法だと思いますか? それとも、1. に関してはある種の自動魔法のようなものがありますか?

  3. アドレスバーにアドレス ( http://www.example.com/MY_PREFIX/ )を入力しても問題は解決しません。カスタマイズが進むべき道なら、これも変更しますが、もっと良い解決策があると思います!

4

2 に答える 2

3

設定で SERVER_PREFIX を配線しないでください。サイトのマウント プレフィックスは、WSGI 環境ディクショナリで SCRIPT_NAME として利用できます。したがって、メモリからは request.META.get('SCRIPT_NAME') として利用できます。

于 2011-09-03T16:52:23.720 に答える
0

これを試してください(それが機能するかどうかはわかりませんが):

WSGIScriptAliasMatch ^/MY_PREFIX(/.*)?$ /path/to/django/app/apache/django.wsgi$1
基本的に、djangoにプレフィックスがないと信じさせるというアイデア

ただし、djangoがHTML出力で正しいURLを出力することを確認する必要があります。

于 2011-09-03T13:26:34.443 に答える