2011-03-24 1 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, если/then-заявления.

+0

Да, я придерживался явных деклараций для каждого метода просмотра. У меня не было слишком много, чтобы было необходимо очистить мой url.py. Благодаря! –

+1

Я думаю, что это правильный вызов :) Для меня, если мне нужно было очистить urls.py, я бы использовал 'include (new_urls)' и сохранил новые URL-адреса в том же приложении, что и представление. –

+0

Преимущество состоит в том, что он действительно полезен при разработке, поскольку вы продолжаете добавлять/удалять методы просмотра, чтобы не задумываться о синхронизации urls.py с методами в представлении. Например, PlayFramework выполняет это, позволяя вам анализировать фрагменты URL-адресов в качестве имен контроллеров/методов – Tony