Архив метки: сайт

Создание сайтов на Django, часть 3. URL, View и Template

В прошлый раз мы рассмотрели паттерн MVC и познакомились, как реализовать первую букву из этого паттерна, а точнее модели, в Django. Теперь нам осталось создать представления для созданной нами модели и собрать это все через контроллер.
Начнем с обратного, сначала соберем контроллер.
Контроллер в Django состоит из двух составляющих — шаблона URL и обработчика View. Все шаблоны URL по идее должны находится в файле urls.py рядом с файлом настроек (обратите внимание на настройку ROOT_URLCONF в settings.py, которая в нашем случае равна ‘mydjangosite.urls’ — это и есть указатель на модуль, в котором описаны все URL сайта). В дальнейшем мы узнаем, что для удобства URLы хранят в папках приложений, а потом их подвязывают к главному файлу. Но для начала предположим, что URL хранятся только в этом файле. Откроем его.
Запомните синтексис описания шаблонов URL:

urlpatterns = patterns('', # База
    # Перечисление шаблонов URL,
)

его формат от приложения в приложению практичски не меняется. В начале перечисления нам любезно предоставили два примера описания шаблонов:

# Examples:
# url(r'^$', 'mydjangosite.views.home', name='home'),
# url(r'^mydjangosite/', include('mydjangosite.foo.urls')),

ими мы и воспользуемся. Добавим в конец перечисления следующие строки (да-да, сразу за раскомментированными URLами к админке):

url(r'^blog/$', 'blog.views.index'),
url(r'^blog/details/(?P<id>\d+)/$', 'blog.views.details'),

Для формирования каждого шаблона используется метод url модуля django.conf.urls, первым параметром которого передается сам шаблон ссылкы (в синтаксисе регулярных выражений), а вторым метод или полное имя метода (если нет желания делать импорт), который будет обрабатывать данный шаблон.
Для тех, кто не очень знаком с регулярными выражениями (советую все-таки познакомится — штука ОЧЕНЬ мощная), во второй строке шаблоном (?P\d+) мы объявили параметр с именем id и типом данных числовой переменной длины (d+). Этот параметр из шаблона будет передан в метод-обработчик.
Теперь мы должны создать два метода внутри модуля blog.views. Один будет называться index, обрабатывать случай, когда запрашивают полный список записей, и соответственно выводить этот список. Второй будет называться details, будет в качестве входного параметра получать id записи, и выводить эту запись.
Перейдем в папку нашего приложения и откроем файл views.py. Он пустой, но мы это исправим. Сначала опишем структуру модуля, добавив следующие строки:

def index(request):
    pass

def details(request, id):
    pass

Читать далее…