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

แชร์
ฝัง
  • เผยแพร่เมื่อ 25 พ.ย. 2024

ความคิดเห็น • 76

  • @АлексейАлексеев-ц8х9т
    @АлексейАлексеев-ц8х9т ปีที่แล้ว +20

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

  • @AlexeySmykov
    @AlexeySmykov ปีที่แล้ว +6

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

  • @vlad_gnom
    @vlad_gnom 6 หลายเดือนก่อน +3

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

  • @Lnx_Mint
    @Lnx_Mint ปีที่แล้ว +8

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

    • @tercesterces1126
      @tercesterces1126 7 หลายเดือนก่อน

      Але спершу потрібно через метод replace() пробіли замінити на '-', інакше слаг буде з пробілом.
      In [4]: for w in Women.objects.all():
      ...: w.slug = str(w.title).replace(' ','-')
      ...: w.save()

  • @SVladimirov14
    @SVladimirov14 5 หลายเดือนก่อน +1

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

  • @andredru4278
    @andredru4278 ปีที่แล้ว +3

    Спасибо. Очень интересно и понятно.

  • @igorratnik2357
    @igorratnik2357 9 หลายเดือนก่อน +2

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

  • @wasd1338
    @wasd1338 11 หลายเดือนก่อน +2

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

  • @СергейНауменко-ь6н
    @СергейНауменко-ь6н ปีที่แล้ว +3

    Очень хорошо спасибо огромное!

  • @Имя-ю6й
    @Имя-ю6й 10 หลายเดือนก่อน +2

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

  • @aston585
    @aston585 8 หลายเดือนก่อน +1

    Супер круто! СПАСИБО!!!

  • @zmerz
    @zmerz ปีที่แล้ว +3

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

  • @stensmitt
    @stensmitt ปีที่แล้ว +5

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

  • @АнатолийСитников-х3г
    @АнатолийСитников-х3г ปีที่แล้ว +1

    Спасибо!

  • @devidbrown8176
    @devidbrown8176 10 หลายเดือนก่อน +2

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

  • @mrduckvc
    @mrduckvc ปีที่แล้ว +1

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

  • @johnmazepa
    @johnmazepa ปีที่แล้ว +3

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

  • @МаксимРайский-н9н
    @МаксимРайский-н9н ปีที่แล้ว +1

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

  • @TheSuchov
    @TheSuchov ปีที่แล้ว +6

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

    • @СергейНауменко-ь6н
      @СергейНауменко-ь6н ปีที่แล้ว +1

      Спасибо

    • @Zavintyshka
      @Zavintyshka ปีที่แล้ว

      Так метод slugify можно импортировать из ветки django.template.defaultfilters. Это в 11 уроке было

    • @TheSuchov
      @TheSuchov ปีที่แล้ว

      @@Zavintyshka
      У него проблемы с кириллицей

    • @Zavintyshka
      @Zavintyshka ปีที่แล้ว

      @@TheSuchov Тоже верно, но для url сойдет

    • @ВладВихновский
      @ВладВихновский 3 หลายเดือนก่อน

      @@Zavintyshka только что попробовал вашим предложенным способом. Слаги не сформировались

  • @astralvois4985
    @astralvois4985 2 หลายเดือนก่อน +1

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

  • @favorid6406
    @favorid6406 ปีที่แล้ว +1

    А если непосредственно в самом sql колонку добавить вручную, миграцию уже делать не надо? Или как

  • @SSk-kw9xw
    @SSk-kw9xw ปีที่แล้ว +1

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

    • @selfedu_rus
      @selfedu_rus  ปีที่แล้ว

      Потому что в словаре коллекции data_db нет метода get_absolute_url.

  • @vindy6136
    @vindy6136 6 หลายเดือนก่อน +1

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

  • @АлексейАлексеев-ц8х9т
    @АлексейАлексеев-ц8х9т ปีที่แล้ว +1

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

    • @selfedu_rus
      @selfedu_rus  ปีที่แล้ว +1

      используется в названии закладки

    • @АлексейАлексеев-ц8х9т
      @АлексейАлексеев-ц8х9т ปีที่แล้ว

      @@selfedu_rus действительно, используется в базовом шаблоне

  • @ВторкинСлава
    @ВторкинСлава ปีที่แล้ว +1

    Классный урок. А могли бы вы на уроке показать как в url подставить категорию. Например, у нас есть категория Актеры, и хотелось бы чтобы все статьи которые прикреплены к данной категории имели url: домен/актеры/название статьи

    • @selfedu_rus
      @selfedu_rus  ปีที่แล้ว +1

      будет отображение статей по категориям

    • @ВторкинСлава
      @ВторкинСлава ปีที่แล้ว +1

      @@selfedu_rus супер, буду ждать. Ваша подача на 5+!

    • @Имя-ю6й
      @Имя-ю6й 10 หลายเดือนก่อน

      @@ВторкинСлава У Вас получилось реализовать данный функционал?

  • @ibrahimoglu
    @ibrahimoglu ปีที่แล้ว +2

    👍

  • @OxoTHuK13
    @OxoTHuK13 11 หลายเดือนก่อน +1

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

    • @devidbrown8176
      @devidbrown8176 10 หลายเดือนก่อน +1

      Вроде как, если через shell добавляешь то БД игнорит условия по заполнению полей. Возможно, что это касается только SQlite. Если я правильно понял, то SQlite довольно специфична)

    • @OxoTHuK13
      @OxoTHuK13 10 หลายเดือนก่อน

      ​@@devidbrown8176 Хм, странно. Ведь в самой БД, если ее открыть в SQLiteStudio, в схеме таблицы на данном поле указано "NOT NULL". Т.е. проверка должна происходить на уровне самой БД, а не на уровне Джанго.
      Сейчас для проверки открыл таблицу в SQLiteStudio, в одной из записей, удалил значение поля, которое должно быть NOT NULL, сохранил, думая, что БД выдаст ошибку, но все успешно сохранилось. Какой-то странный этот SQLite3 - ограничение есть, но оно никак не влияет. ((

  • @АрсланЗугумов
    @АрсланЗугумов ปีที่แล้ว +1

    Интересно, а slugify будет работать через формы (шаблон)? то есть, не через админку

    • @selfedu_rus
      @selfedu_rus  ปีที่แล้ว +1

      slugify - это функция в Django (Python) во фронте ее вызвать уже нельзя

  • @beknazaruzbekov-dn6lx
    @beknazaruzbekov-dn6lx ปีที่แล้ว +2

    Здравствуйте, можно сделать видео с созданием чата на django

    • @mrduckvc
      @mrduckvc ปีที่แล้ว

      Тут уже будет работа с websocket-ом (django channels к примеру), а это объёмная тема. В контексте этих видео-уроков вряд-ли можно уместить такую тему

    • @beknazaruzbekov-dn6lx
      @beknazaruzbekov-dn6lx ปีที่แล้ว

      @@mrduckvc да,но было бы круто если бы него ролик сделал бы

  • @KamilRuziyev
    @KamilRuziyev ปีที่แล้ว +1

    У меня после изменения прямиком в 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  ปีที่แล้ว +1

      Вы, неверное, после редкатирования поля в БД не сохранили ее?

    • @KamilRuziyev
      @KamilRuziyev ปีที่แล้ว

      @@selfedu_rus , и да, и нет. Я просто забыл включить Autocommit в Dbeaver. И после изменений в Dbeaver в самом Database, я забыл нажать на Commit. Все что я написал выше, не решает данную проблему) просто нужно было коммитнуть.

    • @KamilRuziyev
      @KamilRuziyev ปีที่แล้ว

      интересно еще то, что time_update не меняется при изменении базы данных прямиком с Dbeaver.

  • @AntonUrKl
    @AntonUrKl ปีที่แล้ว +1

    Странно, но не работает {% for p in post
    после замены на данные из базы.
    Всё несколько раз перепроверил. Просто пропускает как не итерируемый объект.

    • @AntonUrKl
      @AntonUrKl ปีที่แล้ว

      Прошу прощения, нашёл свою ошибку, все ок)

  • @ЗНАКОМЫЙСВАРЩИК
    @ЗНАКОМЫЙСВАРЩИК ปีที่แล้ว

    Как в этом цикле делать отступы?

  • @showrun4747
    @showrun4747 ปีที่แล้ว +1

    не упомянуто что вместо reverse() лучше использовать её ленивый аналог reverse_lazy()

    • @selfedu_rus
      @selfedu_rus  ปีที่แล้ว +2

      об этом будет дальше, когда дойдем до классов представлений

  • @johnmazepa
    @johnmazepa ปีที่แล้ว +2

    6:34 - строки:
    slug = models.SlugField(..., db_index = True)
    и
    class Meta:
    indexes = [ models.Indexes ( fields = [ '-time_create' ] ) ]
    добавляют один и тот же функционал (индексирование) только для разных полей?

  • @13-th_Lord
    @13-th_Lord 3 หลายเดือนก่อน

    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 3 หลายเดือนก่อน

      Ошибка найдена -- во второй строке после slug зря скобки поставил (невнимательность иногда сильно мешает))

    • @selfedu_rus
      @selfedu_rus  3 หลายเดือนก่อน +1

      наверное, так:
      p.slug = 'slug-'+str(p.pk)

    • @13-th_Lord
      @13-th_Lord 3 หลายเดือนก่อน +1

      @@selfedu_rus Да, именно так))
      (Не сразу увидел ваш ответ, но именно ваш вариант прописания этой строки решил это дело))

  • @ЗНАКОМЫЙСВАРЩИК
    @ЗНАКОМЫЙСВАРЩИК ปีที่แล้ว +1

    Остановился на 10:00, завтра продолжу.

  • @VladimirGavr
    @VladimirGavr ปีที่แล้ว +1

    У меня плохие новости. Бегет использует версию 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 ปีที่แล้ว +1

    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.