№1 Практическая онлайн-школа обучения языкам программирования Python (Django), JavaScript, Kotlin В. Бовсуновского.

Специальная, подарочная акция получения доступа к Django4!

Как, я, начал код писать в Python? Смотрите, если уперлись и ничего не получается.

15. Напишем представления для list и detail.

здесь и слов не нужно все пока просто. нам нужен минимальный код, ведь наша задача url.

class PageListNamespace(ListView):
    model = Page
    template_name = "getlink_app/slug_url/list_slug.html"
    context_object_name = 'pg'
    
   

class PageDetailNamespace(DetailView):
    model = Page
    template_name = "getlink_app/slug_url/detail_slug.html"

Перейти к уроку

16. Пропишем url для извлечения по namespace.

namespace - пространство имён. Другими словами, поскольку несколько экземпляры одного приложения будут совместно использовать именованные URL-адреса, пространства имен предоставляют способ отличить эти именованные URL друг от друга.

По сути принцип тот же, что и с вашей системой, например один и тот же файл может хранить в разных папках и никак не конфликтовать с таким же файлом в другой папке.

Важно уяснить, как использовать namespace + name, так как мы будем часто применять его с id и slug, суть такова, что мы тогда может делать сколь угодно ссылок, например если нам понадобится с одной модели написать много представлений и там могут быть даже одни и те же названия, когда мы меняем названия пространств имён, мы не боимся. что что-то может пересечься и вызвать исключение.

Давайте научимся применять namespace.

Перейти к уроку

17. Пропишем шаблоны и получим исключение NoReverseMatch.

NoReverseMatch - очень частое исключение ставящее в тупик многих разработчиков. Давайте научимся с ним справлятся и понимать что и где править и для чего.

NoReverseMatch.png

Перейти к уроку

18. Разберёмся с pk(primary_key). Если по русски, pk - первичный ключ.

primary_key(первичный ключ), так же называют id. Если проще любая запись в базе данных имеет id, который является целым числом. По нему можно извлечь отдельную запись и сделать другие действия.

Джанго же использует primary_key.

Идут споры среди разработчиков довольно глупые, одни говорят, что primary_key быстрее чем id, другие наоборот.

Согласно исходному коду, то что бы не делал разработчик(мы это увидим здесь или далее, но точно посмотрим исходный код), все равно Джанго приравняет первичный ключ к id, по сему нет разницы, что использовать id или pk. (это уже сами выберите).

Джанго pk устанавливает его автоматом, говорит документация Джанго:

Если вы не укажете primary_key=True для любых полей в вашей модели, Django автоматически добавит IntegerField для хранения первичного ключа, поэтому вам не нужно устанавливать primary_key=True

Наша с вами задача научится его использовать. Это начало задачи и это конец задачи. А там захотите назовёте его super_puper_id_ibon_pk.

Перейти к уроку

19. Разберитесь с регулярными выражениями.

Вам домашнее задание. разберитесь с регулярными выражениями.

Ранее они были принципиальны, теперь же джанго и их делает за нас, во смотрите url

path('absolute-path/detail/<int:id>/<slug:slug>/', PageDetailGetAbsoluteUrl.as_view(),
                                name = 'detail_absolute_path' ),

Обратите внимание на <int:id>, нам достаточно указать, что мы хотим указать тип int и id, а джанго создаст регулярное выражение за вас, хотя, если вы будете делать, как в ранних версиях, при помощи регулярных выражений url, то Джанго это тоже поймёт.

Но освоить их нужно - они точно пригодятся, нам важно умело например, читать те же исключения, что бы понимать, что Джанго сделал для нас.

Я вас направлю.

Джанго ведь выводит регулярное выражение в исключениях.

Reverse for 'view_detail_ns' with no arguments not found. 1 pattern(s) tried: ['page/slug/(?P<pk>[0-9]+)/detail/$']

Перейти к уроку