2011-03-24 1 views
8

dato una visione come questa:In Django, puoi mappare automaticamente gli URL per visualizzare i metodi?

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

Invece di dichiarare in modo esplicito gli URL in urls.py per ogni metodo nella vista:

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

E 'possibile solo dare il dispatcher URL della vista (my_apps.views) e hanno gestito tutti i metodi della vista?

risposta

1

suppongo si può avere una visualizzazione che cattura un regexp URL,

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

con una vista che gestisce il parametro catturato.

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

Tuttavia, consiglio di mantenere la logica di visualizzazione separata per maggiore chiarezza. È molto più semplice seguire 3 diverse visualizzazioni con le loro funzioni specifiche rispetto a 3 istruzioni if ​​/ then.

+0

Sì, mi sono bloccato con il metodo delle dichiarazioni esplicite per visualizzazione. Non ne avevo troppi per rendere necessario pulire il mio 'urls.py'. Grazie! –

+1

Penso che sia la chiamata giusta :) Per me, se avessi bisogno di ripulire urls.py, userei 'include (new_urls)' e manterrò un nuovo url nella stessa app della vista. –

+0

il vantaggio è che è davvero utile in fase di sviluppo man mano che continui ad aggiungere/rimuovere metodi di visualizzazione per non dover pensare a sincronizzare urls.py con i metodi nella vista. Ad esempio, PlayFramework consente di analizzare i frammenti di url come nomi di controller/metodo – Tony