#22. Слаги (slug) в URL-адресах. Метод get_absolute_url() | Уроки по Django 4

  Рет қаралды 16,488

selfedu

selfedu

Күн бұрын

Практический курс по Django: stepik.org/a/1...
Телеграм-канал Django: t.me/django_se...
Инфо-сайт: proproprogs.ru...
Что такое слаг (slug). Добавление поля SlugField в модель. Выборка и отображение записей по слагу.
22_sitewomen.zip: github.com/sel...

Пікірлер: 76
@АлексейАлексеев-ц8х9т
@АлексейАлексеев-ц8х9т Жыл бұрын
Комментарий для продвижения канала и выражения благодарности Сергею, за всё, что он для нас делает
@AlexeySmykov
@AlexeySmykov Жыл бұрын
Замечательный курс. Очень хорошо, что автор развивает прошлый курс
@vlad_gnom
@vlad_gnom 8 ай бұрын
Очень хороший и интересный курс. Очень хочу научиться пользоваться фреймворком Django. Спасибо Сергею за большую помощь.❤
@Lnx_Mint
@Lnx_Mint Жыл бұрын
Я весь сайт делаю на английском и у меня там имена без фамилий, поэтому я сразу сделала person.slug = person.title. Вообще после просмотра первого курса по Джанго стараюсь ставить видео на паузу и сначала сама стараюсь реализовать нужный функционал, а потом уже смотрю как автор объясняет.
@tercesterces1126
@tercesterces1126 9 ай бұрын
Але спершу потрібно через метод replace() пробіли замінити на '-', інакше слаг буде з пробілом. In [4]: for w in Women.objects.all(): ...: w.slug = str(w.title).replace(' ','-') ...: w.save()
@SVladimirov14
@SVladimirov14 8 ай бұрын
Впервые за курсс появилось использование чего-то такого, чего раньше не объясняли - индексирование полей базы данных. Пришлось гуглить, и всё равно не до конца ещё понятно, мб будет понятно дальше. А так лайк авансом
@wasd1338
@wasd1338 Жыл бұрын
то чувство, когда отдельный html для постов сделал для тренировки самостоятельно еще на том этапе, когда писали функцию-заглушку show_posts :D
@andredru4278
@andredru4278 Жыл бұрын
Спасибо. Очень интересно и понятно.
@TheSuchov
@TheSuchov Жыл бұрын
Чтобы "дважды не вставать" в консоли можно сразу прописать корректные slug выполнив импорт from pytils.translit import slugify for w in Women.objects.all(): ...: w.slug = slugify(w.title) ...: w.save() предварительно установить pytils
@СергейНауменко-ь6н
@СергейНауменко-ь6н Жыл бұрын
Спасибо
@Zavintyshka
@Zavintyshka Жыл бұрын
Так метод slugify можно импортировать из ветки django.template.defaultfilters. Это в 11 уроке было
@TheSuchov
@TheSuchov Жыл бұрын
@@Zavintyshka У него проблемы с кириллицей
@Zavintyshka
@Zavintyshka Жыл бұрын
@@TheSuchov Тоже верно, но для url сойдет
@ВладВихновский
@ВладВихновский 5 ай бұрын
@@Zavintyshka только что попробовал вашим предложенным способом. Слаги не сформировались
@СергейНауменко-ь6н
@СергейНауменко-ь6н Жыл бұрын
Очень хорошо спасибо огромное!
@spartanec007_ru
@spartanec007_ru Жыл бұрын
1) Импортим либу: from transliterate import slugify 2) Добавляем в модель магический метод: def __setattr__(self, key, value): if key != 'slug': super().__setattr__(key, value) if key == 'title': super().__setattr__('slug', slugify(value)) Все, теперь, при добавлении новой записи или изменении поля 'title', у уже существующей записи, поле slug автоматически примет нужный красивый вид, не нужно руками ничего забивать, но жирный минус, что будет постоянное обращение к __setattr__ и постоянно подтягиваться библиотека slugify, что выльется в тормоза сайта. Поэтому можно проделать все- тоже самое, переопределив методы __new__ и __setattr__, чтобы обращение к данной библиотеке происходило только в момент создания новой записи.
@Имя-ю6й
@Имя-ю6й Жыл бұрын
Хороший курс. А есть ли возможность сделать так, что бы slug , используя yandex или google translate, автоматически переводил заголовок статьи?
@stensmitt
@stensmitt Жыл бұрын
Не благодарите))) andzhelina-dzholi margo-robbi dzhuliya-roberts ekaterina-guseva
@aston585
@aston585 11 ай бұрын
Супер круто! СПАСИБО!!!
@johnmazepa
@johnmazepa Жыл бұрын
уроки, связанные с жонглированием переменными между файлами, - пока самые сложные
@АнатолийСитников-х3г
@АнатолийСитников-х3г Жыл бұрын
Спасибо!
@astralvois4985
@astralvois4985 4 ай бұрын
мне потребовалось 2 часа чтобы понять что всё идет от счетчика р цикла for, который перебирает в posts у views тем не менее это по-прежнему подробное объяснение логики django, лучше я не видел
@devidbrown8176
@devidbrown8176 Жыл бұрын
Кто знает, есть ли разница, если я прописал get_absolute_url вот так: def get_absolute_url(self): return reverse('post', args=(self.slug, )) Так тоже все работает и во вьюху попадает правильный аргумент и все ок.
@mrduckvc
@mrduckvc Жыл бұрын
В django есть специальный SlugField для slug-ов с удобным функционалом
@zmerz
@zmerz Жыл бұрын
Не пойму, почему Women not defined, при запуске цикла в shell_plus
@АлексейАлексеев-ц8х9т
@АлексейАлексеев-ц8х9т Жыл бұрын
Наверное в шаблоне post.html (на 4:15) правильнее было бы написать {{ title }}, иначе этот ключ, передаваемый в контексте data не используется
@selfedu_rus
@selfedu_rus Жыл бұрын
используется в названии закладки
@АлексейАлексеев-ц8х9т
@АлексейАлексеев-ц8х9т Жыл бұрын
@@selfedu_rus действительно, используется в базовом шаблоне
@МаксимРайский-н9н
@МаксимРайский-н9н Жыл бұрын
Спасибо большое!!! Сколько всего будет видео?
@whosane9923
@whosane9923 Жыл бұрын
80
@SSk-kw9xw
@SSk-kw9xw Жыл бұрын
15:20 - Сергей, объясните пожалуйтса подробнее, почему замена 'posts': data_db на 'posts': posts исправила ошибку с работой ссылок на гравной странице. В чем разница была?
@selfedu_rus
@selfedu_rus Жыл бұрын
Потому что в словаре коллекции data_db нет метода get_absolute_url.
@13-th_Lord
@13-th_Lord 5 ай бұрын
9:12 -- Почему этот цикл выдает ошибку, хоть и делал всё точь в точь как на видео? for p in Persons.objects.all(): p.slug() = 'slug-'+str(p.pk) p.save() Вот текст ошибки: Cell In[3], line 2 p.slug() = 'slug-'+str(p.pk) ^ SyntaxError: cannot assign to function call
@13-th_Lord
@13-th_Lord 5 ай бұрын
Ошибка найдена -- во второй строке после slug зря скобки поставил (невнимательность иногда сильно мешает))
@selfedu_rus
@selfedu_rus 5 ай бұрын
наверное, так: p.slug = 'slug-'+str(p.pk)
@13-th_Lord
@13-th_Lord 5 ай бұрын
@@selfedu_rus Да, именно так)) (Не сразу увидел ваш ответ, но именно ваш вариант прописания этой строки решил это дело))
@ВторкинСлава
@ВторкинСлава Жыл бұрын
Классный урок. А могли бы вы на уроке показать как в url подставить категорию. Например, у нас есть категория Актеры, и хотелось бы чтобы все статьи которые прикреплены к данной категории имели url: домен/актеры/название статьи
@selfedu_rus
@selfedu_rus Жыл бұрын
будет отображение статей по категориям
@ВторкинСлава
@ВторкинСлава Жыл бұрын
@@selfedu_rus супер, буду ждать. Ваша подача на 5+!
@Имя-ю6й
@Имя-ю6й Жыл бұрын
@@ВторкинСлава У Вас получилось реализовать данный функционал?
@vindy6136
@vindy6136 9 ай бұрын
Можете сказать зачем мы пишем "title":post.title? На второй title у меня выводится ошибка, та и я сама не понимаю откуда берется.
@ibrahimoglu
@ibrahimoglu Жыл бұрын
👍
@favorid6406
@favorid6406 Жыл бұрын
А если непосредственно в самом sql колонку добавить вручную, миграцию уже делать не надо? Или как
@OxoTHuK13
@OxoTHuK13 Жыл бұрын
Досмотрел урок до конца, все сделал по нему и решил через shell-plus подобавлять еще постов в БД: Women.objects.create(title='Натали Портман', content='Биография Натали Портман') Django почему-то без проблем добавила новую запись в БД, хотя в модели указано поле slug = models.SlugField(max_length=255, unique=True, db_index=True) Почему shell не выдал ошибку, что не заполнено поле slug?
@devidbrown8176
@devidbrown8176 Жыл бұрын
Вроде как, если через shell добавляешь то БД игнорит условия по заполнению полей. Возможно, что это касается только SQlite. Если я правильно понял, то SQlite довольно специфична)
@OxoTHuK13
@OxoTHuK13 Жыл бұрын
​@@devidbrown8176 Хм, странно. Ведь в самой БД, если ее открыть в SQLiteStudio, в схеме таблицы на данном поле указано "NOT NULL". Т.е. проверка должна происходить на уровне самой БД, а не на уровне Джанго. Сейчас для проверки открыл таблицу в SQLiteStudio, в одной из записей, удалил значение поля, которое должно быть NOT NULL, сохранил, думая, что БД выдаст ошибку, но все успешно сохранилось. Какой-то странный этот SQLite3 - ограничение есть, но оно никак не влияет. ((
@johnmazepa
@johnmazepa Жыл бұрын
6:34 - строки: slug = models.SlugField(..., db_index = True) и class Meta: indexes = [ models.Indexes ( fields = [ '-time_create' ] ) ] добавляют один и тот же функционал (индексирование) только для разных полей?
@KamilRuziyev
@KamilRuziyev Жыл бұрын
У меня после изменения прямиком в Dbeaver, изменения не показываются в Django. То есть slug-1 работает, а angelina-jolie нет, хотя в database я изменил slug-1 на angelina_jolie. Мне помогло fetching all objects дважды: сначала all_objects = Women.objects.all(), потом еще раз all_objects = Women.objects.all()
@selfedu_rus
@selfedu_rus Жыл бұрын
Вы, неверное, после редкатирования поля в БД не сохранили ее?
@KamilRuziyev
@KamilRuziyev Жыл бұрын
@@selfedu_rus , и да, и нет. Я просто забыл включить Autocommit в Dbeaver. И после изменений в Dbeaver в самом Database, я забыл нажать на Commit. Все что я написал выше, не решает данную проблему) просто нужно было коммитнуть.
@KamilRuziyev
@KamilRuziyev Жыл бұрын
интересно еще то, что time_update не меняется при изменении базы данных прямиком с Dbeaver.
@AntonUrKl
@AntonUrKl Жыл бұрын
Странно, но не работает {% for p in post после замены на данные из базы. Всё несколько раз перепроверил. Просто пропускает как не итерируемый объект.
@AntonUrKl
@AntonUrKl Жыл бұрын
Прошу прощения, нашёл свою ошибку, все ок)
@АрсланЗугумов
@АрсланЗугумов Жыл бұрын
Интересно, а slugify будет работать через формы (шаблон)? то есть, не через админку
@selfedu_rus
@selfedu_rus Жыл бұрын
slugify - это функция в Django (Python) во фронте ее вызвать уже нельзя
@beknazaruzbekov-dn6lx
@beknazaruzbekov-dn6lx Жыл бұрын
Здравствуйте, можно сделать видео с созданием чата на django
@mrduckvc
@mrduckvc Жыл бұрын
Тут уже будет работа с websocket-ом (django channels к примеру), а это объёмная тема. В контексте этих видео-уроков вряд-ли можно уместить такую тему
@beknazaruzbekov-dn6lx
@beknazaruzbekov-dn6lx Жыл бұрын
@@mrduckvc да,но было бы круто если бы него ролик сделал бы
@ЗНАКОМЫЙСВАРЩИК
@ЗНАКОМЫЙСВАРЩИК Жыл бұрын
Остановился на 10:00, завтра продолжу.
@ЗНАКОМЫЙСВАРЩИК
@ЗНАКОМЫЙСВАРЩИК Жыл бұрын
Как в этом цикле делать отступы?
@showrun4747
@showrun4747 Жыл бұрын
не упомянуто что вместо reverse() лучше использовать её ленивый аналог reverse_lazy()
@selfedu_rus
@selfedu_rus Жыл бұрын
об этом будет дальше, когда дойдем до классов представлений
@VladimirGavr
@VladimirGavr Жыл бұрын
У меня плохие новости. Бегет использует версию MySQL 5.7.21. А в джанго 4.2 уже нет поддержки этой версии, только 8ка…
@АлексейАлексеев-ц8х9т
@АлексейАлексеев-ц8х9т Жыл бұрын
Что есть "Бегет"?
@zion4d
@zion4d Жыл бұрын
​@@АлексейАлексеев-ц8х9т хостинг провайдер
@VladimirGavr
@VladimirGavr Жыл бұрын
@@АлексейАлексеев-ц8х9т это хостинг
@VladimirGavr
@VladimirGavr Жыл бұрын
я установил версию Джанго 4.1
@harry_holland
@harry_holland Жыл бұрын
кайф, когда есть собственная вдска
@obyeboshen
@obyeboshen Жыл бұрын
7:23 тут ошибки нет, миграцию создает, но потом при ее применении уже она возникнет
@obyeboshen
@obyeboshen Жыл бұрын
и почему-то еще если убрать blank=True, мигрирует с пустыми строками спокойно, интересно почему
@ЗНАКОМЫЙСВАРЩИК
@ЗНАКОМЫЙСВАРЩИК Жыл бұрын
Битый час бьюсь, ничего не выходит, пишет: django.core.exceptions.ImproperlyConfigured: WSGI application 'djangoProjectSB.wsgi.application' could not be loaded; Error importing module. Убрал все изменения связанные с функцией show_post и все равно не работает Как будто что-то сбилось, пробовал даже перегрузит пайчарм.
@ЗНАКОМЫЙСВАРЩИК
@ЗНАКОМЫЙСВАРЩИК Жыл бұрын
Нашел в чем дело, почему-то 'django_extensions', было еще прописано в настройках в MIDDLEWARE. А не только в INSTALLED_APP.
VIP ACCESS
00:47
Natan por Aí
Рет қаралды 30 МЛН
Мясо вегана? 🧐 @Whatthefshow
01:01
История одного вокалиста
Рет қаралды 7 МЛН
How to treat Acne💉
00:31
ISSEI / いっせい
Рет қаралды 108 МЛН
КАК УСТРОЕН TCP/IP?
31:32
Alek OS
Рет қаралды 289 М.
Django REST Framework - создаем API для сайта
21:17
Дед погроммист
Рет қаралды 21 М.
VIP ACCESS
00:47
Natan por Aí
Рет қаралды 30 МЛН