Специальная, подарочная акция получения доступа к Django4!
Как, я, начал код писать в Python? Смотрите, если уперлись и ничего не получается.
здесь и слов не нужно все пока просто. нам нужен минимальный код, ведь наша задача 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"
namespace - пространство имён. Другими словами, поскольку несколько экземпляры одного приложения будут совместно использовать именованные URL-адреса, пространства имен предоставляют способ отличить эти именованные URL друг от друга.
namespace
URL-адреса
По сути принцип тот же, что и с вашей системой, например один и тот же файл может хранить в разных папках и никак не конфликтовать с таким же файлом в другой папке.
Важно уяснить, как использовать namespace + name, так как мы будем часто применять его с id и slug, суть такова, что мы тогда может делать сколь угодно ссылок, например если нам понадобится с одной модели написать много представлений и там могут быть даже одни и те же названия, когда мы меняем названия пространств имён, мы не боимся. что что-то может пересечься и вызвать исключение.
namespace + name
id
slug
Давайте научимся применять namespace.
NoReverseMatch - очень частое исключение ставящее в тупик многих разработчиков. Давайте научимся с ним справлятся и понимать что и где править и для чего.
NoReverseMatch
primary_key(первичный ключ), так же называют id. Если проще любая запись в базе данных имеет id, который является целым числом. По нему можно извлечь отдельную запись и сделать другие действия.
primary_key
Джанго же использует primary_key.
Идут споры среди разработчиков довольно глупые, одни говорят, что primary_key быстрее чем id, другие наоборот.
Согласно исходному коду, то что бы не делал разработчик(мы это увидим здесь или далее, но точно посмотрим исходный код), все равно Джанго приравняет первичный ключ к id, по сему нет разницы, что использовать id или pk. (это уже сами выберите).
id или pk
Джанго pk устанавливает его автоматом, говорит документация Джанго:
pk
Если вы не укажете primary_key=True для любых полей в вашей модели, Django автоматически добавит IntegerField для хранения первичного ключа, поэтому вам не нужно устанавливать primary_key=True
primary_key=True
IntegerField
Наша с вами задача научится его использовать. Это начало задачи и это конец задачи. А там захотите назовёте его super_puper_id_ibon_pk.
super_puper_id_ibon_pk
Вам домашнее задание. разберитесь с регулярными выражениями.
Ранее они были принципиальны, теперь же джанго и их делает за нас, во смотрите 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/$']
< 1 2 3 4 5 6 7 >