Добавление главной страницы

Начальный курс по Django дал вам представление о том, как работает URL Mapping и Views.
Перечень правил, связывающих URL сайта с view-функциями, содержится в списке urlpatterns. В каждом элементе вызывается специальная функция path(). Вот знакомый вам пример urlpatterns:
Скопировать кодPYTHON
urlpatterns = [ # правила для сопоставления шаблонов URL и функций path('', views.index), path('accounts/sign-up', acc_views.sign_up), path('accounts/sign-in', acc_views.sign_in), # а вот path() с параметром name path('accounts/my-account', acc_views.my_account, name='account'), ]
Функция path() принимает такие параметры: path(route, view, name)
Есть и дополнительные параметры функции path(), о которых можно прочесть в документации.
Генератор проекта создал главный файл yatube/urls.py, но в нём будут только ссылки на urls.py приложений нашего проекта.
Создадим шаблон адреса главной страницы в urls.py приложения Posts и напишем view-функцию для обработки запроса к этой странице.
В приложении Posts создайте файл posts/urls.py и добавьте в него код:
Скопировать кодPYTHON
from django.urls import path from . import views urlpatterns = [ path("", views.index, name="index") ]
В головной файл yatube/urls.py добавьте импорт правил из нового файла:
Скопировать кодPYTHON
from django.contrib import admin from django.urls import include, path urlpatterns = [ # импорт правил из приложения posts path("", include("posts.urls")), # импорт правил из приложения admin path("admin/", admin.site.urls), ]
Запросы к БД можно делать прямо из кода Python, для этого в Django ORM есть специальный синтаксис. Вместо того чтобы писать громоздкие запросы, можно одной строкой получить информацию из базы данных.
В файл posts/views.py добавьте views-функцию index:
Скопировать кодPYTHON
from django.http import HttpResponse from .models import Post def index(request): # одна строка вместо тысячи слов на SQL latest = Post.objects.order_by('-pub_date')[:10] # собираем тексты постов в один, разделяя новой строкой output = [] for item in latest: output.append(item.text) return HttpResponse('\n'.join(output))
Вы справились с уроком по SQL, так что и без объяснений разберётесь, какие операции совершает функция index. Тут несколько правильных ответов, выбирайте.
В функции index переменная latest получает выборку записей модели Post из БД. После имени модели и специальной точки входа .objects указаны условия запроса.
В запросе мы:
Конструкция написана на безупречном языке Python.
Механизм Django ORM переводит её на SQL:
Скопировать кодSQL
SELECT 'posts_post'.'id', 'posts_post'.'text', 'posts_post'.'pub_date', 'posts_post'.'author_id' FROM 'posts_post' ORDER BY 'posts_post'.'pub_date' DESC LIMIT 10
Полученные записи передаются в код как объекты класса Post и в виде списка сохраняются в переменной latest. Мы проходим по ним циклом, из каждого объекта достаём значение свойства text и добавляем тексты постов в список output. Затем возвращаем строку, собранную из элементов этого списка. Это и есть наш ответ на HTTP-запрос.
Сохраните файлы и откройте главную страницу проекта http://127.0.0.1:8000
image
Определенно, это тот же самый текст, что и в админ-зоне. Выглядит не очень, но вы уже сделали большой шаг вперёд: вывели текст из базы данных на главную страницу блога.
Вот ещё несколько примеров, как можно получить данные из базы: