2016-10-04 5 views
1

私はdjangoアプリケーションをビルドする際にrunserverコマンドを使用してウェブサイトをテストしますが、デプロイメントでは私のウェブサイトをwww.test.com/で公開しますdjango。サブディレクトリ内のDjango

私のIISは、「django」と呼ばれる私のデフォルトのウェブサイトの下でアプリケーションで設定しています。

私は正常に動作しますが、Djangoは私のURLスキーマを認識しない場合、すべてが、それは以下の一つであることを期待している:

urlpatterns = [ 
    # Examples: 
    url(r'^$', app.views.home, name='home'), 
    url(r'^contact$', app.views.contact, name='contact'), 
    url(r'^about', app.views.about, name='about'), 
] 

この場合、私はこのように私のurlpatternsを変更する必要がありますwww.test.com/django経由でアプリケーションを提供するには:

urlpatterns = [ 
    url(r'^(?i)django/', include([ #Application name 
     # Examples: 
     url(r'^$', app.views.home, name='home'), 
     url(r'^contact$', app.views.contact, name='contact'), 
     url(r'^about', app.views.about, name='about'), 
    ])), 
] 

これは良いアプローチですか?それは働いていますが、私はこのソリューションの品質についてはわかりません。

答えて

0

この問題を解決するには、WebサーバーがSCRIPT_NAME wsgi変数に合格するようにすることをお勧めします。 Djangoはurlを変更することなく、urlを構築する際にこの変数を接頭辞として自動的に使います。私はIISに精通していないので、これを行う方法を教えることはできません。スクリプト名は設定ではなくDjangoに渡されるため、コードがWSGIアプリケーションの実際のマウントポイントに完全に無関心であるという利点があります。

また、FORCE_SCRIPT_NAMEの設定を/django/に設定することもできます。

+0

今、テストされているので、デバッグでは現在の名前でインクルードする必要がありますか?もしそうでなければ、私自身のローカルデバッグサーバ上のサブディレクトリをテストすることはできないからです。 しかし、FORCE_SCRIPT_NAMEを使用して、URL補間(URLテンプレートタグを使用することが期待どおりに機能します)! – VirtApp

+0

@VirtApp 'FORCE_SCRIPT_NAME = '/ django /''は、開発設定ではなく、プロダクション設定でのみ設定してください。 – knbk

+0

私の知るところですが、私の開発サーバーでは、そのディレクトリをシミュレートする必要がありますので、デバッグ設定の場合は条件付きのものを追加する必要がありますか、そうではありません: 'urlpatterns2 = patterns ''、 url(= 'admin /'、include(admin.site.urls))、 url(r '^ admin /'、include(admin.site.urls))url(r '^ $'、 'yourapp.views.home'、name = 'Home' ( ''、 url(r '^ django /'、include(urlpatterns2))、 ) ' – VirtApp

関連する問題