Простой блог на Django - часть 6. Работа с маршрутами. Вывод всех записей блога.

Начну с того, что расскажу вкратце, зачем вообще нужны маршруты (или как их иногда называют - роуты). А необходимы они в первую очередь для того, чтобы сопоставить URL в адресной строке браузера с функцией или классом (для краткости его называют View), которая обрабатывает входящие данные. 

При разворачивании приложения, в папке проекта создаётся файл newapp/newapp/urls.py, в котором у нас есть ровно один маршрут:

urlpatterns = [
path('admin/', admin.site.urls),
]

Здесь за сопоставление маршрута с классом или функцией отвечает функция path, которая состоит из двух параметров:

  1. Адрес маршрута, посредством которого будет вызываться нужный View. Здесь должно быть всё максимально ясно, так как с адресом /admin нам уже приходилось сталкиваться ранее, когда мы рассматривали административный раздел сайта
  2. Непосредственно сам View, к которому и происходит обращение. Либо же список группы маршрутов (в данном случае это admin.site.urls), каждый из которых в свою очередь может указывать на свой View. 

Подключение маршрутов приложения (сущности)

Несмотря на то, что у нас пока всего лишь один файл urls.py, гораздо удобнее, когда у каждой сущности есть такой файл с маршрутами (роутами). Поэтому давайте попробуем создать такой файл в нашем приложении posts - для этого в самой папке сущности создадим файл urls.py со следующим содержимым:

from django.urls import path
from . import views
urlpatterns = [
path("", views.index, name="index")
]

Первый параметр пуст, что подразумевает собой обращение к главной странице. Кроме того, здесь мы видим и третий параметр, который не является обязательным и используется только лишь в качестве псевдонима, для краткого построения к маршруту (об этом чуть позже). 

Однако сам по себе такой файл ни на что влиять не будет и для того, чтобы его задействовать в полной мере, необходимо подключить его к головному файлу приложения /newapp/newapp/urls.py Сделать это можно, добавив в переменную urlpatterns следующую строчку:

path("", include("posts.urls")),

Тем самым будет произведён импорт всех правил из приложения posts, а полный текст файла будет таким:

from django.contrib import admin
from django.urls import include, path
urlpatterns = [
  path("", include("posts.urls")),
  path("admin/", admin.site.urls),
]

Работа с View и Django ORM

Для работы с Вью у каждого приложения есть свой файл views.py и поскольку в роутинге приложения в качестве View указан views.index, то нам необходимо в файл views добавить функцию index. А значит переходим в файл posts/views.py и редактируем его следующим образом:

from django.http import HttpResponse
from .models import Post
def index(request):
    latest = Post.objects.order_by('-pub_date')[:10]
    output = []
    for item in latest:
        output.append(item.text)
    return HttpResponse('\n'.join(output))

Что же происходит в данном коде? В переменную latest мы получаем последние 10 постов, сортированных по дате публикации в обратном порядке. Затем в цикле проходимся по всем постам и в массив output записываем текст каждой записи.

Далее с помощью функции HttpResponse мы отдаём контент, формируя его посредством склеивания всех элементов массива output, объединенных символом новой строки. Да, это не очень красиво и поэтому одна из следующих заметок будет посвящена тому, как исправить данную ситуацию. 

Коммит с изменениями - https://github.com/maclen2007/simple_django_blog/commit/deb1589c4af9d766635351ce493fb4ed3c932c1f

Комментарии ()

    Вы должны авторизоваться, чтобы оставлять комментарии.