私はこのような同じルートURLに住む複数のDjangoのプロジェクトを持っているしたいと思います:複数のDjangoプロジェクト
example.com/ # controlled by home django project
example.com/project-2 # controlled by a separate django project
example.com/project-3 # controlled by yet another django project
私はすでにsuggested by this excellent answerとしてなど、LOGIN_REDIRECT_URLを再定義していますが、私は別のを発見しましたハードル。私は実際にexample.com/project-2とexample.com/project-3に住んでいるプロジェクトで同じアプリを使用しています。これは今までのところdjangoプロジェクトの内容にリンクするためのいくつかの重要な問題を引き起こします一見ハッキーな解決策で解決しました。
たとえば、example.com/project-2またはexample.com/project-3のいずれのテンプレートでも '/'を参照することはできません。これらのURLのいずれかでホストされているdjangoプロジェクトのルートに戻るには---これはexample.comのホームdjangoプロジェクトにリンクします。これを回避するために、カスタムのsettings.py変数SCRIPT_NAME( 'example.com)、'/project-2 '(example.comの場合)に基づいてプロジェクトのルートURLを正しく追加するコンテキストプロセッサを作成しました/ project-2)、または '/ project-3'(example.com/project-3の場合)です。これは、get_absolute_url関数で同じことをする必要があることを除いて、すべて上質です。私がそれを知る前に、(自分以外の人たちによって)非常に再利用可能なコードを、まったく再利用できないコードに変換しました。
SCRIPT_NAMEに絶対URLを追加することなく同じ効果を達成する方法はありますか?おそらくapacheやmod_wsgiの設定で賢明な何か?私は途方に暮れていますし、誰かが助けることができる願って...
EDIT:example.comの私のApacheの設定は次のようになります
:
# redirect un-'/'-terminated urls to the '/'-terminated root urls
RewriteEngine On
RewriteRule /project-2$ /project-2/ [R=302,L]
RewriteRule /project-3$ /project-3/ [R=302,L]
# mod wsgi setup
WSGIScriptAlias /project-2 /srv/project2/project-2.wsgi
WSGIScriptAlias /project-3 /srv/project3/project-3.wsgi
WSGIScriptAlias//srv/project1/project-1.wsgi
上記の編集を参照してください。私のapacheの設定はあなたの説明に似ています(+ RewriteRulesは違いがある場合)。 URLを逆にして作成するとき、Djangoは自動的にこれを考慮に入れますか?これは箱から私のために働かなかった... – dino
訂正、get_absolute_urlとURLテンプレートタグを使用して、箱はそのままで動作します。この問題は、ハードコードされたURLでのみ発生します。ご協力いただきありがとうございます! – dino
ダニエルは正しく動作するはずです。つまり、適切なテンプレートタグと他のDjango関数をURLの構築に使用する必要があります。テンプレートでは、 'url templateタグを使用する必要があります。 「https://docs.djangoproject.com/ja/1.3/ref/templates/builtins/#url」を参照してください。あなたは実際にそのテンプレートタグを使用していますか、そうでなければURLをテンプレートにハードワイヤリングしていますか? –