2010-01-19 27 views
4

我試圖使用一個應用程序來滿足多個URL路徑。也就是說,我想讓網址/blog//job/使用相同的應用程序,但使用不同的視圖。有很多方法可以做到這一點我相信,但沒有一個看起來很乾淨。下面是我在做什麼,現在如何使用一個應用程序來滿足多個URL在Django

# /urls.py 
urlpatterns = patterns("", 
    (r"^(blog|job)/", include("myproject.myapp.urls")), 
) 

# /myapp/urls.py 
urlpatterns = patterns("myproject.myapp.views", 
    (r"^(?P<id>\d+)/edit/$", "myproject.myapp.views.edit"), 
    (r"^(?P<id>\d+)/delete/$", "myproject.myapp.views.delete"), 
    (r"^(?P<id>\d+)/update/$", "myproject.myapp.views.update"), 
    (r"^insert/$",    "myproject.myapp.views.insert"), 
) 

urlpatterns += patterns("", 
    (r"^(?P<object_id>\d+)/$", "django.views.generic.list_detail.object_detail", info_dict, "NOIDEA-detail"), 
    (r"^/$",     "django.views.generic.list_detail.object_list", info_dict, "NOIDEA-community"), 
) 

# /myapp/views.py 
def edit(request, type, id): 
    if (type == "blog"): 
     editBlog(request, id) 
    else (type == "job") 
     editJob(request, id) 

def editBlog(request, id): 
    # some code 

def editJob(request, id): 
    # some code 

我已經結束了斷這一切到多個模型和視圖文件,使代碼更加清晰,但上述例子不佔之類的反向鏈接查找其打破我的所有模板{% url %}調用。

最初,我有博客,工作,活動,比賽等都生活在自己的應用程序,但他們的所有功能是如此相似,以至於沒有道理離開它,所以我試圖結合他們......這發生了。你在我的通用視圖中看到那些「NOIDEA-detail」和「NOIDEA-community」的網址名稱?是的,我不知道該用什麼方法:-(

回答

4

你可以有多於一個的模塊定義的網址您可以在myapp/urls.py/blog/ URL和/job/網址​​,或者你可以在urls子包內有兩個模塊。

另外,您也可以手動前綴您網址定義:

urlpatterns = patterns("myproject.myapp.views", 
    (r"^jobs/(?P<id>\d+)/edit/$", "myproject.myapp.views.edit"), 
    (r"^jobs/(?P<id>\d+)/delete/$", "myproject.myapp.views.delete"), 
    (r"^jobs/(?P<id>\d+)/update/$", "myproject.myapp.views.update"), 
    (r"^jobs/insert/$",    "myproject.myapp.views.insert"), 
) 

urlpatterns += patterns("", 
    (r"^blog/(?P<object_id>\d+)/$", "django.views.generic.list_detail.object_detail", info_dict, "NOIDEA-detail"), 
    (r"^blog/$",     "django.views.generic.list_detail.object_list", info_dict, "NOIDEA-community"), 
) 

然後將它們安裝爲:

urlpatterns = patterns("", 
    (r"", include("myapp.urls")), 
) 

個人而言,我會去更多的REST風格的URL定義雖然。如blog/(?P<post_id>\d+)/edit/$

0

對我來說看起來很不錯如果你想反向查找,每個url格式只需要一個不同的反向名稱,即使它們最終指向相同的視圖。

相關問題