Простой блог на Django - часть 6. Работа с маршрутами. Вывод всех записей блога.
Начну с того, что расскажу вкратце, зачем вообще нужны маршруты (или как их иногда называют - роуты). А необходимы они в первую очередь для того, чтобы сопоставить URL в адресной строке браузера с функцией или классом (для краткости его называют View), которая обрабатывает входящие данные.
При разворачивании приложения, в папке проекта создаётся файл newapp/newapp/urls.py, в котором у нас есть ровно один маршрут:
urlpatterns = [
path('admin/', admin.site.urls),
]
Здесь за сопоставление маршрута с классом или функцией отвечает функция path, которая состоит из двух параметров:
- Адрес маршрута, посредством которого будет вызываться нужный View. Здесь должно быть всё максимально ясно, так как с адресом /admin нам уже приходилось сталкиваться ранее, когда мы рассматривали административный раздел сайта
- Непосредственно сам 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
Вы должны авторизоваться, чтобы оставлять комментарии.
Комментарии ()