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

preview_player
Показать описание

Что такое слаг (slug). Добавление поля SlugField в модель. Выборка и отображение записей по слагу.

Рекомендации по теме
Комментарии
Автор

Комментарий для продвижения канала и выражения благодарности Сергею, за всё, что он для нас делает

АлексейАлексеев-цхт
Автор

Замечательный курс. Очень хорошо, что автор развивает прошлый курс

AlexeySmykov
Автор

Очень хороший и интересный курс. Очень хочу научиться пользоваться фреймворком Django. Спасибо Сергею за большую помощь.❤

vlad_gnom
Автор

Я весь сайт делаю на английском и у меня там имена без фамилий, поэтому я сразу сделала person.slug = person.title.
Вообще после просмотра первого курса по Джанго стараюсь ставить видео на паузу и сначала сама стараюсь реализовать нужный функционал, а потом уже смотрю как автор объясняет.

Lnx_Mint
Автор

Впервые за курсс появилось использование чего-то такого, чего раньше не объясняли - индексирование полей базы данных. Пришлось гуглить, и всё равно не до конца ещё понятно, мб будет понятно дальше. А так лайк авансом

SVladimirov
Автор

то чувство, когда отдельный html для постов сделал для тренировки самостоятельно еще на том этапе, когда писали функцию-заглушку show_posts :D

wasd
Автор

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__, чтобы обращение к данной библиотеке происходило только в момент создания новой записи.

igorratnik
Автор

Чтобы "дважды не вставать" в консоли можно сразу прописать корректные slug выполнив импорт
from pytils.translit import slugify
for w in Women.objects.all():
...: w.slug = slugify(w.title)
...: w.save()
предварительно установить pytils

TheSuchov
Автор

Не благодарите)))
andzhelina-dzholi
margo-robbi
dzhuliya-roberts
ekaterina-guseva

stensmitt
Автор

Хороший курс.
А есть ли возможность сделать так, что бы slug, используя yandex или google translate, автоматически переводил заголовок статьи?

Имя-юй
Автор

Наверное в шаблоне post.html (на 4:15) правильнее было бы написать {{ title }}, иначе этот ключ, передаваемый в контексте data не используется

АлексейАлексеев-цхт
Автор

уроки, связанные с жонглированием переменными между файлами, - пока самые сложные

johnmazepa
Автор

Кто знает, есть ли разница, если я прописал get_absolute_url вот так:
def get_absolute_url(self):
return reverse('post', args=(self.slug, ))
Так тоже все работает и во вьюху попадает правильный аргумент и все ок.

devidbrown
Автор

В django есть специальный SlugField для slug-ов с удобным функционалом

mrduckvc
Автор

Не пойму, почему Women not defined, при запуске цикла в shell_plus

zmerz
Автор

15:20 - Сергей, объясните пожалуйтса подробнее, почему замена 'posts': data_db на 'posts': posts исправила ошибку с работой ссылок на гравной странице. В чем разница была?

SSk-kwxw
Автор

мне потребовалось 2 часа чтобы понять что всё идет от счетчика р цикла for, который перебирает в posts у views
тем не менее это по-прежнему подробное объяснение логики django, лучше я не видел

astralvois
Автор

Спасибо большое!!!
Сколько всего будет видео?

МаксимРайский-нн
Автор

Досмотрел урок до конца, все сделал по нему и решил через shell-plus подобавлять еще постов в БД:
Портман', content='Биография Натали Портман')
Django почему-то без проблем добавила новую запись в БД, хотя в модели указано поле slug = models.SlugField(max_length=255, unique=True, db_index=True)
Почему shell не выдал ошибку, что не заполнено поле slug?

OxoTHuK
Автор

Можете сказать зачем мы пишем "title":post.title?
На второй title у меня выводится ошибка, та и я сама не понимаю откуда берется.

vindy