2011-09-28 62 views
40

我對django相當陌生,但是在Python和java web編程中有不同的框架。 我已經讓自己成爲一個不錯的小django應用程序,但我似乎無法使它與www.mysite.com相匹配,而不是www.mysite.com/myapp。Django的URL,如何將根映射到應用程序?

我已經在我的urls.conf中定義了urls和views,這些urls.conf目前不與應用程序分離(不介意)。

urlpatterns = patterns('myapp.views', 
    (r'^myapp/$', 'index'), 
    (r'^myapp/(?P<some_id>\d+)/global_stats/$', 'global_stats'), 
    (r'^myapp/(?P<some_id>\d+)/player/(?P<player_id>\d+)/$', 'player_stats'), 
) 

所有這一切都像一個魅力。如果有人去www.mysite.com/myapp他們會打我的索引視圖,導致http重定向到我的「正確的」默認網址。因此,如何添加一個與(r'^ myapp/$','index')相同的模式,但沒有/ myapp - 即www.mysite.com應該足夠嗎?

我認爲這將是非常基本的東西...我嘗試添加一行:

(r'^$', 'index'), 

然而,這引發了我在一個循環中......

希望你的Django大師那裏可以爲我澄清這一點!

回答

53

這聽起來很奇怪。

你的最新嘗試應該工作,但我通常做 - 把

urlpatterns = patterns('', 
    (r'^$', lambda r: HttpResponseRedirect('myapp/')), 
    ... 
) 

當你開始添加新應用,這能更好地伸縮。

+0

那麼,由於某種原因,這個工程,我的解決方案不 - 如此虐待堅持使用這個! :) – Hoof

+0

如果你發送給我的gzip與你最小的應用程序,我可以看到它有什麼問題。順便說一句,從我的不同文件:urlpatterns = patterns('common.views',url('^ $','home',name ='home'),...),工作得很好 – Guard

+0

這非常好,因爲它可以確保用戶最終進入應用程序的真實/「正確」URL,而不是默默暗示它真的位於根目錄。 –

4

只要把一個空的原正則表達式:R「」

我這裏測試它完美地工作。

urlpatterns = patterns('', 
    url(r'', include('homepage.urls')), 
    url(r'^homepage/', include('homepage.urls')), 
    url(r'^admin/', include(admin.site.urls)), 
) 

希望它有幫助!

+2

如果你這樣做,任何從模板中的助手生成的URL都不起作用:( – jrwren

91

我知道這個問題是2年前問過,但我已經遇到了同樣的問題,找到了解決方法:

在項目urls.py

urlpatterns = patterns('', 
    url(r'^', include('my_app.urls')), #NOTE: without $ 
) 

my_app.urls.py

urlpatterns = patterns('', 
    url(r'^$', 'my_app.views.home', name='home'), 
    url(r'^v1/$', 'my_app.views.v1', name='name_1'), 
    url(r'^v2/$', 'my_app.views.v2', name='name_2'), 
    url(r'^v3/$', 'my_app.views.v3', name='name_3'), 
) 
+1

太棒了!在Django 1.8上工作 – fabrigm

+1

在Django 1.9上的很棒的作品也 – Amir

+1

PERFECT!像Django一樣具有魅力1.8.4 – Frankline

0

我知道答案已經晚了,但最近我有一些狩獵活動。這就是我試圖與CBV .. 在項目urls.py

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^$', include('app_name.urls', namespace='app_name')), 
] 

PS:這是我們推薦使用的命名空間。稍後給予好的優勢。

在應用urls.py

urlpatterns = [ 
    url(r'^$', views.IndexPageView.as_view(), name='index'), 
] 
相關問題