Специальная, подарочная акция получения доступа к Django4!
Как, я, начал код писать в Python? Смотрите, если уперлись и ничего не получается.
Вам домашнее задание. разберитесь с регулярными выражениями.
Ранее они были принципиальны, теперь же джанго и их делает за нас, во смотрите url
path('absolute-path/detail/<int:id>/<slug:slug>/', PageDetailGetAbsoluteUrl.as_view(), name = 'detail_absolute_path' ),
Обратите внимание на <int:id>, нам достаточно указать, что мы хотим указать тип int и id, а джанго создаст регулярное выражение за вас, хотя, если вы будете делать, как в ранних версиях, при помощи регулярных выражений url, то Джанго это тоже поймёт.
<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/$']
Очень частое исключение сбивающее с толку программистов, опять же не понимающих функции.
Reverse for 'view_detail_ns' with no arguments not found. 1
Давайте разберём его и научимся исправлять.
Ещё очень частое исключение, которое выскакивает и выбивает из колеи разработчиков:
AttributeError ...either an object pk or a slug in the URLconf.
По сути дело связно с не понимаем pk и id, не пониманием переопределения и не желанием вдуматься в исключение.
Давайте разберём его и воспроизведём.
Я говорил в уроках, что исключения получения после исправления очень важно воспроизвести заново(запомните это правило), что бы понимать суть и видеть что и где править.
Исправлять исключения(ошибки по народному), так же говорят иногда фиксить баги.
Исправлять исключения(ошибки по народному)
фиксить баги
Давайте получим первый опыт, как фиксить баги, принцип просто искать до последнего и думать, а потом бежать в гугл.
как фиксить баги
Давайте покажу.
Ещё один способ получения url - get_absolute_url(прямой url).
url - get_absolute_url(прямой url)
Здесь народ потерялся и не хочет читать документацию, столько домыслов создали и потом по интернету одни и те же ошибки копируют.
Хотя в документации сказано яснее ясного, читать не умеют и не знают, где, для нас с вами непонимание это не позволительная роскошь.
Давайте сразу поясню.
Например, мы извлекаем url по namespace и по slug, но не написали в настройках модели unique=True, то есть поле slug не является уникальным, что будет делать Джанго?
ur
namespace и по slug
unique=True
slug
При использовании namespase Django найдёт сначала пространство имен, а потом в нем будет искать первое совпадение, например по slug и если несколько записей с одним и тем же slug, то выдаст первое, что бы такого не было мы и указываем unique=True, то есть второй slug с таким же названием исключен. Джанго сработает надёжно и точно выдаст нужную запись.
namespase
slug = models.SlugField(max_length=50,unique=True)
насчёт настроек полей, ранее ведь в уроках я говорил, что они должны быть изучены, проверьте себя, вы знаете их изучили, просмотрели, попробовали. Заметьте не одно слово я не говорю зря, если говорю, то точно в этом есть смысл. Будьте внимательны и требовательны к себе, ведь вы хотите быть профи?
Так вот get_absolute_url() полностью исключает возможность даже малейшую не верно вывести запись, так как запись будет извлекаться не по поиску, а как конкретная переменная, для этого мы пропишем сам метод get_absolute_url(точнее будет сказать переопределим) в самой модели.
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
< 1 2 3 ... 7 8 9 10 11 ... 59 60 61 >