2011-06-22 23 views
2

私はこのような同じルート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 

答えて

3

あなたはどのようにお見せしていませんあなたのApache設定からこれらのプロジェクトを提供しています。これは役に立ちました。しかし、それらを個別のWSGIScriptAliasディレクティブとして定義すると、SCRIPT_NAMEが自動的に渡されます.Djangoは、URLを逆にして作成するときに考慮します。

WSGIScriptAlias /project-2 /srv/project2/project2.wsgi 
WSGIScriptAlias /project-3 /srv/project3/project3.wsgi 
WSGIScriptAlias//srv/project1/project1.wsgi 
+0

上記の編集を参照してください。私のapacheの設定はあなたの説明に似ています(+ RewriteRulesは違いがある場合)。 URLを逆にして作成するとき、Djangoは自動的にこれを考慮に入れますか?これは箱から私のために働かなかった... – dino

+0

訂正、get_absolute_urlとURLテンプレートタグを使用して、箱はそのままで動作します。この問題は、ハードコードされたURLでのみ発生します。ご協力いただきありがとうございます! – dino

+0

ダニエルは正しく動作するはずです。つまり、適切なテンプレートタグと他のDjango関数をURLの構築に使用する必要があります。テンプレートでは、 'url templateタグを使用する必要があります。 「https://docs.djangoproject.com/ja/1.3/ref/templates/builtins/#url」を参照してください。あなたは実際にそのテンプレートタグを使用していますか、そうでなければURLをテンプレートにハードワイヤリングしていますか? –

関連する問題