Целью домашнего задания является:
- создание основных view сайта (отображающих “рыбу”);
- настройка маршрутизации URL;
- использование шаблонизатора для генерации HTML;
- постраничное отображение (пагинация).
Разработать view для отображения следующих страниц:
- cписок новых вопросов (главная страница) (URL = /)
- cписок “лучших” вопросов (URL = /hot/)
- cписок вопросов по тэгу (URL = /tag/blablabla/)
- cтраница одного вопроса со списком ответов (URL = /question/35/)
- форма логина (URL = /login/)
- форма регистрации (URL = /signup/)
- форма создания вопроса (URL = /ask/)
На данном этапе view не обязаны выбирать данные из базы, их задача - подготовить данные-заглушки (“рыбу”) и передать на отрисовку в соответствующий шаблон. Например таким образом:
questions = []
for i in xrange(1,30):
questions.append({
‘title’: ‘title ‘ + str(i),
‘id’: i,
‘text’: ‘text’ + str(i)
})
Далее список questions можно будет легко заменить на выборку из базы данных. Вьюшки отображающие формы (например форму логина) - могут просто вызывать шаблон.
Для всех вышеперечисленных view нужно прописать маршруты в urls.py. Маршруты должны быть именованными.
Для каждой из вышеперечисленных view нужно создать отдельный шаблон, отрисовывающий HTML данной страницы. В шаблонах не должно быть дублирования HTML - для этого следует использовать наследование шаблонов и подшаблоны (include). В шаблонах должны быть прописаны гиперссылки для переходов на другие страницы. URL не хардкодить, вместо этого использовать тэг url.
Общим функционалом для этих страниц является пагинация. Поэтому функционал пагинации следует вынести в отдельную функцию, которая будет принимать список объектов (или query-set), объект запроса (request) и будет возвращать нужную страницу и данные для шаблона пагинатора. Некорректные параметры пагинации нужно заменять на значения по-умолчанию. Примерная сигнатура функции такова:
def paginate(objects_list, request):
# do smth with Paginator, etc…
return objects_page, paginator
- Туториал по Django Views;
- Документация по шаблонам;
- Наследование шаблонов;
- Постраничный вывод (пагинация).