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

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

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

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/$']

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

20. Исправляем исключение Reverse for 'view_detail_ns' with no arguments not found. 1 pattern(s) tri

Очень частое исключение сбивающее с толку программистов, опять же не понимающих функции.

Reverse for 'view_detail_ns' with no arguments not found. 1

Давайте разберём его и научимся исправлять.

NoReverseMatch.png

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

21. Получим ещё частое исключение. AttributeError ...either an object pk or a slug in the URLconf.

Ещё очень частое исключение, которое выскакивает и выбивает из колеи разработчиков:

AttributeError ...either an object pk or a slug in the URLconf.

По сути дело связно с не понимаем pk и id, не пониманием переопределения и не желанием вдуматься в исключение.

Давайте разберём его и воспроизведём.

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

AttributeError

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

22. Высший пилотаж в работе с исключениями url. Фиксим баги.

Исправлять исключения(ошибки по народному), так же говорят иногда фиксить баги.

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

Давайте покажу.

Исправлять исключения(ошибки по народному), так же говорят иногда фиксить баги.

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

Давайте покажу.

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

23. Научимся получать url переопределением get_absolute_url(прямой url).

Ещё один способ получения url - get_absolute_url(прямой url).

Здесь народ потерялся и не хочет читать документацию, столько домыслов создали и потом по интернету одни и те же ошибки копируют.

Хотя в документации сказано яснее ясного, читать не умеют и не знают, где, для нас с вами непонимание это не позволительная роскошь.

Давайте сразу поясню.

Например, мы извлекаем url по namespace и по slug, но не написали в настройках модели unique=True, то есть поле slug не является уникальным, что будет делать Джанго?

При использовании namespase Django найдёт сначала пространство имен, а потом в нем будет искать первое совпадение, например по slug и если несколько записей с одним и тем же slug, то выдаст первое, что бы такого не было мы и указываем unique=True, то есть второй slug с таким же названием исключен. Джанго сработает надёжно и точно выдаст нужную запись.

slug = models.SlugField(max_length=50,unique=True)

насчёт настроек полей, ранее ведь в уроках я говорил, что они должны быть изучены, проверьте себя, вы знаете их изучили, просмотрели, попробовали. Заметьте не одно слово я не говорю зря, если говорю, то точно в этом есть смысл. Будьте внимательны и требовательны к себе, ведь вы хотите быть профи?

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

get_absolute_url() Вы можете его использовать везде, где хотите, но как правило используется в больших приложениях, в админках приложений, где могут быть одинаковые файлы, что бы избежать исключения и извлечь именно то что нужно используем get_absolute_url().

def get_absolute_url(self):
        return reverse('yes_ns:detail_absolute_path', kwargs={'pk': self.pk, 'slug': self.slug  })  #'slug': self.slug

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