wsgi.conf ファイルに次の行があります。
WSGIScriptAlias /trunk "c:/app/trunk/app.wsgi"
私の django 設定ファイル内で、LOGIN_URL を正しく機能させるには、エイリアス "/trunk" を知る必要があります。Apache 設定からこの値を取得するにはどうすればよいですか?
ありがとう!ピート
特定のリクエストの元の WSGI 環境ディクショナリにアクセスし、'SCRIPT_NAME' 変数を検索します。この値は、WSGIScriptAlias を使用するときに指定された WSGI アプリケーションの概念上のマウント ポイントです。リクエストごとの環境を通過することは、それを自動的に行う唯一の現実的な方法です。リクエストの外からアクセスすることはできず、実際にアクセスする必要はありません。
当然のことながら、Django はアプリケーションのマウント ポイントをそのような構成済み URL に自動的に挿入する方法を提供する必要があります。おそらく Django の変更が必要なため、その方法が見つからない場合は、代わりに公式の Django ユーザー リストで問題を提起する必要があります。
Apache の構成から値を取得したいので、ファイルを読み取って処理するしかないと思います。
次のようなものです (settings.py が wsgi.conf と同じディレクトリにあると仮定します):
try:
f = open('wsgi.conf', 'r')
LOGIN_URL=[line for line in f.readlines() if 'WSGIScriptAlias' in line][0].split()[1]
finally:
f.close()
ファイルが存在しない場合に例外をキャッチすることも良い考えかもしれません。
コメントの後に編集:ああ、あなたがやろうとしていることがわかります。このスレッドは、使用が機能しない理由を理解するのに役立つ場合がありますos.environ
。彼らが提示する代替手段はあなたを助けません:
一言で言えば、Apache SetEnv は os.environ が表すプロセス環境に値を設定していません。代わりに、SetEnv は WSGI リクエストのコンテキストで値を設定しています。
コード内では、request.environ でそのコンテキストを参照できます。
def myView(request):
tier = request.environ['TIER']
また私です。Apache の SetEnv が行っていることのため、settings.py の変数にアクセスできないと思います。ファイルの解析がまだ唯一のオプションのようです。
さらに編集:別の選択肢 - ホスト名に基づいて決定できますか?
#settings.py
import socket
production_servers = { 'server1.com': '/trunk...',
'server2.com': '/trunk_2...' }
LOGIN_URL=production_servers[ socket.gethostname() ]
これにより、Apache 構成に含まれる情報が完全に回避されます。