2011-03-24 67 views
8

鑑於這樣的觀點:在Django中,您是否可以自動將URL映射到查看方法?

# my_app/views.py 
def index(request): 
    ... 
def list(request): 
    ... 
def about(request): 
    ... 

相反的明確聲明網址urls.py爲視圖中的每個方法:

# urls.py 
url(r'^index$', 'my_app.views.index'), 
url(r'^list$', 'my_app.views.list'), 
url(r'^about$', 'my_app.views.about'), 
... 

是否有可能只是把它的URL調度視圖(my_apps.views )並讓它處理所有視圖的方法?

回答

1

我想你可以有一個觀點,即抓住一個URL的正則表達式,

r'^(?P<viewtype>index|list|about)/$', 'myview'

與處理拍攝參數的視圖。

def myview(request, viewtype): 
    if viewtype == 'index': 
      return http.HttpResponse("I'm the index view") 
    elif viewtype == 'list': 
      return http.HttpResponse("I'm the list view') 

但我真的建議保持您的視圖邏輯分離爲清晰。使用3個不同的視圖和他們特定的功能要比3個if/then語句更容易。

+0

是的,我堅持顯式聲明每個視圖的方法。我沒有太多需要清理我的'urls.py'。謝謝! – 2011-03-24 07:04:21

+1

我認爲這是正確的呼叫:)對於我來說,如果我需要清理urls.py,我會使用'include(new_urls)'並在同一個應用中保留一個新的urls作爲視圖。 – 2011-03-24 07:25:44

+0

的好處是,它在開發過程中非常有用,因爲您繼續添加/刪除視圖方法而不必考慮將urls.py與視圖中的方法同步。例如,PlayFramework通過允許您將URL片段解析爲控制器/方法名稱來實現此目的 – Tony 2012-06-22 22:01:14

相關問題