いくつかのコンテキストのために、管理部分を安全に実行するために、webfaction の nginx+gunicorn の背後で Django (1.4) アプリの実行をテストしています。これはうまくいっています。nginx プロキシは からのリクエストをリダイレクトしhttp://domain.com/admin
てhttps://domain.com/admin
おり、Django は問題なくすべてを提供しています。より大きな問題は、静的ファイルです。これらは、http と https の両方でアクセスされる別の静的ディレクトリから提供されています。私の問題は、リクエストが保護されているかどうかに応じて適切なプレフィックス (http または https) が適用されるように、アプリのテンプレートと管理インターフェイス テンプレートで静的 URL をレンダリングする方法です。
私のアプリのテンプレートで{{ STATIC_URL }}path/to/resource
は、template_context_processor 関数で STATIC_URL コンテキスト変数を簡単に調整できる規則を使用しました。{% static path/to/resource %}
ただし、これは、 templatetag を使用して URL をレンダリングする 管理用テンプレートには影響しません。
私が思いついた最善の方法は、settings.pyで 2 つの URL オプションを作成することです。
STATIC_URL = 'https://mydomain.com/static/'
NON_SECURED_STATIC_URL = 'http://mydomain.com/static/'
次に、次の関数をTEMPLATE_CONTEXT_PROCESSORSに追加しました。
def set_static_url(request):
if not request.is_secure():
return { 'STATIC_URL': settings.NON_SECURED_STATIC_URL }
これは実際に機能していますが、かなりハックのようです。私は Django にもまったく慣れていないので、これを行うためのより適切な方法が必要だと感じています。