2011-03-24 9 views
8

Biorąc widok takiego:Czy w Django możesz automatycznie mapować adresy URL, aby wyświetlić metody?

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

Zamiast wyraźnie oświadczając, adresy URL w urls.py dla każdej metody w widoku:

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

to możliwe, aby tylko dać dyspozytora URL pogląd (my_apps.views) i czy obsługuje wszystkie metody widoku?

Odpowiedz

1

przypuszczam można mieć jeden widok, który przechwytuje regexp url,

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

z myślą, która obsługuje przechwycony parametr.

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') 

Ale naprawdę poleciłabym zachować oddzielną logikę widoku dla lepszej przejrzystości. Dużo łatwiej jest śledzić 3 różne widoki z ich specyficznymi funkcjami niż 3 instrukcje if/then.

+0

Tak, utknąłem z metodą wyraźnych deklaracji na widok. Nie miałem zbyt wielu, aby zmusić mnie do wyczyszczenia mojego 'urls.py'. Dzięki! –

+1

Myślę, że to jest właściwe połączenie :) Dla mnie, jeśli potrzebowałem oczyścić urls.py, użyłbym 'include (new_urls)' i zachować nowe adresy URL w tej samej aplikacji co widok. –

+0

Zaletą jest to, że jest bardzo przydatny w rozwoju, ponieważ dodajesz/usuwasz metody przeglądania, aby nie myśleć o synchronizowaniu urls.py z metodami w widoku. Na przykład PlayFramework umożliwia to, analizując fragmenty url jako nazwy kontrolerów/metod – Tony