#12. Добавляем слаги (slug) к URL-адресам | Django уроки

แชร์
ฝัง
  • เผยแพร่เมื่อ 24 ม.ค. 2025

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

  • @donfedor007
    @donfedor007 4 ปีที่แล้ว +41

    Доброе время суток! Спасибо Вам за урок, и за то, что даёте задания в конце. Вчера не смог сделать вечером. С утра почитал документацию и всё получилось!
    def show_category(request, cat_slug):
    posts = Women.objects.filter(cat__slug=cat_slug)
    dict = {'title': 'Отображение по рубрикам',
    'posts': posts,
    'cat_selected': cat_slug
    }
    return render(request, 'woomen/index.html', context=dict)

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

      Fart, а cat__slug - это что за аргумент?

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

      Почему фильтр идет по cat__slug с двумя подчеркиваниями? Где про это почитать можно?

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

      @@deniskrepak В 15 уроке на 15-й минуте этого курса есть немного информации про двойное подчеркивание

    • @Name-ko3qb
      @Name-ko3qb 2 ปีที่แล้ว +2

      мдааа... откуда нам было знать про __ :)

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

      @@Name-ko3qb капец, полдня убил, пока нашел как обратиться к полям второй БД.

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

    Платные курсы не показывают такой уровень объяснеия как вы. Все так приятно понятно.

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

    Домашнее задание получилось!!!! В show_category надо
    cat = Category.objects.filter(slug = cat_slug)
    posts = Women.objects.filter(cat_id = cat[0].id)
    и ниже - 'cat_selected': cat[0].id,
    Остальное так же как в уроке.

    • @СергейСмирнов-ь8у
      @СергейСмирнов-ь8у 3 ปีที่แล้ว +2

      Stas, здравствуйте. Если не сложно объясните пожалуйста - cat[0].id, Как работает [0].id ?

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

      @@СергейСмирнов-ь8у Приветствую. Дело в том, что мы выбрали категорию при помощи метода filter, а значит нам вернулся список cat с одним значением - той категорией, с которой у нас совпал slug. И чтобы достать из этого списка ту единственную категорию, пришлось написать cat[0]. По этому, если нам нужно достать одну запись из БД, корректнее использовать метод get: cat = Category.objects.get(slug = cat_slug). Тогда значение cat и будет записью из БД, а не списком с этим же значением.

    • @СергейСмирнов-ь8у
      @СергейСмирнов-ь8у 2 ปีที่แล้ว +1

      @@DmytroLarin Дмитро, дякую.

    • @Alukard-789
      @Alukard-789 2 ปีที่แล้ว

      Вау! Дякую.)🤗

    • @yanafrolova8140
      @yanafrolova8140 2 ปีที่แล้ว

      Станислав, спасибо за подсказку! Ковырялась 2 дня, не могла разобраться почему выдает ошибку, теперь все работает.

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

    Курс фантастика. Ты очень хорошо объясняешь.
    Люблю вот когда все до мелочей и есть конечная цель.
    Можно бы было еще ДЗ давать и все бы слали в задницу SKILLBOXЫ всякие 😂

  • @ИванПетров-й5г
    @ИванПетров-й5г 2 ปีที่แล้ว +3

    Спасибо, Сергей!
    При добавлении поля с уникальными значениями в действующую базу следует поступить в два этапа:
    1. Добавляем поля со значением по умолчанию
    python manage.py makemigrations
    python manage.py migrate
    2. Выставляем значения поля в админпанеле уникальные (не повторяющиеся) если будут повторы то следующая миграция не отработает
    3. Добавляем поле с параметром уникальности убираем значение по умолчанию
    python manage.py makemigrations
    python manage.py migrate
    class Women(models.Model):
    title = models.CharField(max_length=255, verbose_name='Заголовок')
    #slug = models.SlugField(max_length=255, verbose_name='SlugURL', default='sfs') # 1 --- Первая миграция (раскомметировать )
    slug = models.SlugField(max_length=255, unique=True, db_index=True, verbose_name='SlugURL') # 2 --- Вторая миграция

  • @МихаилПоликарпов-ф4м
    @МихаилПоликарпов-ф4м 3 ปีที่แล้ว +6

    Речь, объяснение... все четко. Мужик, подписка с меня

  • @НикБарыкин
    @НикБарыкин 2 ปีที่แล้ว +9

    Единственный момент в видео (да и пока что во всей серии), который прям смутил - это дроп БД при конфликте миграций.
    ИМХО, стоило уточнить для начинающих, что так делать никогда не надо, и мы сейчас это сделали только потому, что проект учебный, и тратить время на разрешение появившегося конфликта просто нерелевантно задачам уроков. А то ведь кто-нибудь потом так и на боевой БД додумается сделать :)

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

    Очень благодарен за Ваши курсы. За этот и другие. Очень нравится стиль изложения, внимание к деталям. Спасибо!

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

    Спасибо, Сергей! Здорово!

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

    Я потихоньку продвигаюсь😁 никогда не слушал о понятии слаг , хорошо просветился😌 спасибо

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

    Огромная благодарность за ваши уроки. Смотрю и потом сразу перевариваю и применяю в своем проекте. Я только столкнулась с незадачей, что после удаления старых миграций и создания новых я не могу перейти на некоторые страницы. Но ничего, буду разбираться сейчас. Еще раз большое спасибо, просто захотелось поделиться:)

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

    Спасибо большое!

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

    Сергей, огромное спасибо за урок, знаний становится все больше! Ура!

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

    А если бы в бд было бы тысячи записей? Еле сделал задание в конце - вся загвостка в том что когда мы фильтруем таблицу Women - через foreign key нужно получить доступ к полю slug таблицы Category - нужно прописать objects.filter(cat_id__slug=cat_slug) во вьюхе

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

    Видео отличное, большое спасибо за вашу работу) Добавлю доп.инфу, так как провёл много часов воюя со слагами в своём немного другом тренировочном проекте, а в видео был пример сайта в случае, если контент заполняется администратором. Если же нужно, чтобы слаг страницы создавался автоматически, например пользователь создаёт тему, то для автоcоздания слага на сайте надо инсталлить модуль "pip install django-autoslug==1.9.8" далее прописывать в модели "from autoslug.fields import AutoSlugField" и указывать в модели: slug = AutoSlugField(populate_from='title', unique=True, db_index=True) populate_from='title' - это мой пример, у вас могут конечно же быть другие параметры.

    • @glieseb-yo4sk
      @glieseb-yo4sk 2 ปีที่แล้ว

      Не работает как надо, AutoSlugField просто почему-то берёт название класса модели, переводит в нижний регистр, и в дальнейшем прибавляет к нему числа по порядку, если unique=True, т.е. в поле slug получаются значения women, women-2, women-3... Решил костылём, передав свою функцию в параметр slugify, т.е. переопределив slugify, напишите плз, если кто знает , как заставить работать это чудо из коробки?

    • @markvisok3343
      @markvisok3343 2 ปีที่แล้ว

      @@glieseb-yo4sk так и должно быть, эти слаги являются "юзер-френдли", есть альтернативное решение, а именно: выдавать в юрл id поста и затем слаг(в таком случае unique = False), но данное решение является менее безопасным, поэтому большинство пользуется нумерацией для постов с повторяющимся названием. Единственный плюс поиска по id: слаг становится необязательным для ввода и происходит автоматический переход на полную ссылку со слагом. Так реализован stackoverflow

    • @glieseb-yo4sk
      @glieseb-yo4sk 2 ปีที่แล้ว

      @@markvisok3343 спасибо, теперь понятно, что так и задумано. Моя задача - сделать так, чтобы слаг при отправке из формы формировался автоматически, притом как в админке - на основе заголовка, с транслитерацией русских букв, заменой пробелов и т.д. Написал свою функцию slugify для AutoSlugField - заработало, но при unique=True и добавлении одинаковых записей через форму теперь к слагу справа просто добавляется дефис и нумерация. Как теперь запретить создание одинаковых записей?

    • @markvisok3343
      @markvisok3343 2 ปีที่แล้ว

      @@glieseb-yo4sk
      Eсли ты хочешь запретить создание одинаковых слагов, то стоит вместо populate_from='title' прописать вызываемую функцию(есть примеры в документации autoslug), затем навесить декоратор на саму функцию-генератор, который будет проверять наличие возвращенного слага в базе данных, но, мне кажется, что это лишнее и проще смириться с одинаковыми слагами и их "индексированием", нежели нагружать так сильно бд.
      Если не нравится индексирование - используй com/cat_slug/post_id/post_slug, тут post_slug играет лишь информативную роль для юзера и может повторяться, т.к. сам поиск проходит по post_id.
      Муж моей матери работает в сфере безопасности и посоветовал так не делать, он сам предпочитает встроенное "индексирование" одинаковых слагов

    • @glieseb-yo4sk
      @glieseb-yo4sk 2 ปีที่แล้ว

      @@markvisok3343 чет я затупил, тут всё просто, в модели в поле title прописал unique=True, и всё как надо заработало!

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

    Делаю по вашим видео пет проект, очень много полезного узнаю, спасибо. продолжайте в том же духе

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

    Все очень понятно и детально и без воды! Спасибо большое. Один момент нашел на 2:31 : мне кажеться в словаре context не обязательно передавать 'title' - он уже есть в post.

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

      да, разошелся ))

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

    какой же Вы классный! Учусь в ЯП. Ужасно написана теория... мне, как новичку, вообще непонятно. Удаётся разобраться только благодаря Вашим видео. Зачем пошла туда учиться...? одно мучение.

    • @НикБарыкин
      @НикБарыкин 2 ปีที่แล้ว

      Поддерживаю. Учусь в скилбоксе. Там есть классные курсы, но вот по джанго материал записан просто ужасно. Спасаюсь также тут: за 11 видео стало понятней, что вообще фреймворк из себя представляет, чем за 2 месяца курсов

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

    !Комментарий для поддержки материала!

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

    Спасибо большое, курс шикарный !!!

    • @Yaroslav-yz2xk
      @Yaroslav-yz2xk 10 หลายเดือนก่อน

      Вы же в курсе, что там новый недавно вышел)?

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

    Классные видео, их бы лет 5 назад и я был бы сегодня senior Python разработчик.

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

    Как всегда всё на высшем уровне спасибо!!

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

    Хороший урок! Спасибо! Продолжайте!

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

    Отличный гайд🎉

  • @volodjaz
    @volodjaz 2 ปีที่แล้ว

    Ты гениален, смотрел кучу курсов по джанго и только у тебя формирование слага пишется в одну строку:)

  • @2000Vladik
    @2000Vladik 4 ปีที่แล้ว +1

    Спасибо, хороший урок!

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

    Урок 🔥, спасибо!

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

    Интересный урок. Но домашнее задание не получилось. Хотя , я думаю, понимаю суть проблемы.
    Если в show_category записать - posts = Women.objects.all(). (A все остальное делаем по примеру из урока)
    То ошибки нет, при клике на категории(Актрисы или Певицы) адрес страницы выходит со слагом, как надо.
    Но посты на странице все что есть (objects.all()). По идее надо отфильтровать.
    Пробовал так -
    cat = Category.objects.filter(slug = cat_slug)
    posts = Women.objects.filter(cat_id = cat.id)
    То есть сначала получаем объект Category по фильтру слага.
    Можем получить id категории (cat.id) (но реально не получаем)
    и по нему уже отфильтровываем Women.objects
    Но браузер выдает ошибку. 'QuerySet' object has no attribute 'id'
    Что интересно, если id категории указать явно в коде цифрой (posts = Women.objects.filter(cat_id = 1), то для конкретной категории все работает, адрес со слагом, контент фильтруется. Значит я почему то не могу получить cat.id (cat.pk тоже пробовал).

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

    Пока разбирался как встроить это домашнее задание в код с учетом предыдущего задания, где категории оформлены с помощью пользовательских тэгов мозг закипел, зато лучше разобрался в обеих темах

  • @olgatitova9517
    @olgatitova9517 4 ปีที่แล้ว +13

    Сергей, а есть ли в планах урок по размещению проекта на хостинге? Или как переносить базу на хостинг?

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

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

  • @АлександрЛобанов-о2у
    @АлександрЛобанов-о2у ปีที่แล้ว +1

    лайк в поддержку канала

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

    Сергей, спасибо за видеокурс, доступно и понятно. Вопрос
    в context = {
    'post':post,
    #'title':post.title,
    'cat_selected':post.cat_id,
    } передаем title':post.title, но ведь туда передаем же post у кторого поле title, которое потом же можем вытащить

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

      Почти. title - заголовок документа (тег title), а post.title - заголовок документа (тег h1). С точки зрения SEO - это часто разное содержимое, поэтому я сразу их разделил на уровне шаблона и Django. В примере, да, передаю одно и то же, но в реальности, будут разные данные.

    • @7527497
      @7527497 3 ปีที่แล้ว

      @@selfedu_rus с точки зрения продвижения, плотность текста и разные теги положительно влияют на позицию, насколько я знаю

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

      @@7527497 Есть такая гипотеза, но перебарщивать с ключевиками точно не надо. А вообще, моя позиция - делайте сайты для людей и люди оценят!

    • @Nonstop4ik
      @Nonstop4ik 2 ปีที่แล้ว

      @@selfedu_rus делай сайты для людей, но не забывай накручивать поведенческие и др. приколы =D

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

    1:32 можно по другому еще, без импорта функции get_object_or_404()
    Например:
    Obj_Car = Car.objects.get(title = "Volvo") или Obj_Car = Car.objects.get(pk = car_id)
    Car - это предварительно импортированная модель. (любая) через from .models import Car

  • @Vladimir-re8xl
    @Vladimir-re8xl 4 ปีที่แล้ว +2

    Благодарю

  • @Alukard-789
    @Alukard-789 2 ปีที่แล้ว +1

    Спасибі!)😁

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

    Ни у кого такого видео не видел. Лишь все показывают базовый айди, далее сам догадывайся) А тут всё показали. Так можно спокойно создать годный портал по чему хочешь)

  • @ЕгорШишкин-г8ь
    @ЕгорШишкин-г8ь ปีที่แล้ว +2

    Есть вариант и не делать слаг уникальным, тогда шаблон url адреса будет следующим "post//"

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

    404 лайка -- плохая примета, надо исправить
    Большое спасибо автору за такой подробный курс, еще и бесплатно, всё понятно и просто становится

  • @Alex-ux4dw
    @Alex-ux4dw ปีที่แล้ว +1

    Спасибо автору, очень хороший курс. Домашнее задание... промучился долго, делал все как нужно, только без двойного подчеркивания, выдавало ошибку как раз в этой строке. Спасибо @donfedor007, что подсказал. И спасибо всем, кто писал про это, а то я мог бы и не заметить, что там именно двойное подчеркивание))))))))))

  • @ВладимирЛысов-г3г
    @ВладимирЛысов-г3г ปีที่แล้ว +2

    Домашнее задание:
    def show_category(request, cat_slug):
    cat_id = CategoryTRU.objects.get(slug=cat_slug).id
    posts = MainTRU.objects.filter(category=cat_id)
    if len(posts) == 0:
    raise Http404()
    context = {
    'posts': posts,
    'title': CategoryTRU.objects.get(slug=cat_slug).cat_name, #'По категориям',
    'cat_selected': cat_id
    }
    return render(request, 'works/index.html', context=context)

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

    После дз где надо добавить слаги к категориям, категории стали кликабельны даже если они уже выбраны, чтобы это исправить в шаблоне list_categories делаем проверку не на pk, а на ... {% if c.slug == cat_selected %} ...

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

    столкнулся с такой проблемой. В конце прошлого урока вы дали задание сделать тег меню. Так вот проблема в том, что это меню теперь нигде не отображается(About, post и т.д.). пытался гуглить, но не нашел решения

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

    Благодарю за уроки, очень доходчиво. Наконец то начал понимать, а не механически повторять за уроками в Ютубе. Хотелось бы узнать, а на сайте proproprogs.ru будут статьи по Django?

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

      Спасибо, конечно будут, как сформируется курс!

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

    Не понимаю. Так и не смог сделать вывод по категориям. Единственно до чего додумался: посты связаны с категориями по id категорий, и где то здесь засада. Exception Value:
    Field 'id' expected a number but got 'aktrisy'.

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

    Что у меня не получилось slug для категорий не знаю как здесь написать objects.filter(cat_id=cat_id) ???????? кто знает подскажите????

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

    Сергей подскажите пожалуйста А почему {{ post.title}}? У меня просто по title тоже работает,
    И ешё
    'post': post,
    'menu': menu,
    'title': post.title,
    'cat_selected': post.cat_id,

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

    Спасибо

  • @Niki-bp7up
    @Niki-bp7up ปีที่แล้ว +1

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

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

    Спасибо.

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

    Пытался часа 2 сделать слаги для категорий. Так и не смог, возможно из за моего не умения работать с html. Надеюсь в следующих уроках это будет, очень хочется узнать, КАК? Спасибо вам за ваши уроки!

    • @philippnazarenko7090
      @philippnazarenko7090 2 ปีที่แล้ว

      Второй день уже ковыряюсь с этим: в url слаги подставляет, но не понял как отфильтровавать спосок постов...

    • @philippnazarenko7090
      @philippnazarenko7090 2 ปีที่แล้ว

      Прочитал дальше, подставил предложенный код и все получилось. Только остался пока вопрос про два подчеркивания во views.py, но в 15 занятии должно быть объяснение...

  • @Freddi.V
    @Freddi.V 3 ปีที่แล้ว +2

    У меня вопрос по заданию, вроде просто как дважды два, но ошибку исправить не могу.
    Ошибка:
    show_category() got an unexpected keyword argument 'cat_id'
    когда перехожу в категорию.
    в фалйле urls:
    path('category//', show_category, name='category'),
    в файле views:
    def show_category(request, cat_slug):
    post = Decoration.objects.filter(cat_slug=cat_slug)
    if len(post) == 0:
    raise Http404()
    dict = {
    'post': post,
    'menu': menu,
    'title': 'Отображение по рубрикам',
    'cat_selected': cat_slug,
    }
    return render(request, 'decoration/index.html', context=dict)
    пробовал менять в шаблоне list_categories
    с.pk => c.slug
    cat_selected => cat_slug или slug
    всё равно ошибка что выше, связанная с функцией sow_category...
    Подскажите пожалуйста!

    • @Freddi.V
      @Freddi.V 3 ปีที่แล้ว +1

      В 15-ом видео всё разрешилось. Я понял, что глубоко капать тоже плохо и долго зацыкливаться на одной ошибке.
      Благодарю за Ваши бесценные уроки!

  • @Name-ko3qb
    @Name-ko3qb 2 ปีที่แล้ว +1

    Reverse for 'category' with keyword arguments '{'cat_id': ' '}' not found. 1 pattern(s) tried: ['category/(?P[0-9]+)\\Z']
    как решить эту ошибку?

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

    Просто, доступно, понятно. Спасибо! Один небольшой вопрос: конечно в учебных целя всю БД с несколькими записями похерить можно, особенно если есть возможность потом скопировать готовую. А как в реальности изменить структуру БД, не прибегая к таких жестким методам, с сохранением дынных? Как раз этот пример очень подошел бы.

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

      В MySQL и думаю в других СУБД можно делать импорт и экспорт БД целиком. Как вариант, можно воспользоваться этим инструментом.

    • @rostislavmalyshev1775
      @rostislavmalyshev1775 4 ปีที่แล้ว

      @@selfedu_rus Я немного не про импорт/экспорт (ну вот не откуда импортировать новую готовую базу), а про изменение структуры существующей (как добавить slug) c сохранением всех данных.

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

      @@rostislavmalyshev1775 В крайнем случае можно небольшой скрипт написать по переброске данных.

    • @rostislavmalyshev1775
      @rostislavmalyshev1775 4 ปีที่แล้ว

      @@selfedu_rus А можно ли сначала определить поля slug как неуникальные, null =True, сделать миграции, потом заполнить уникальными значениями и после добавить unique=True? И еще вопрос по поводу ДЗ (слагов в категориях): если делать
      cat_id = Category.objects.get(slug =cat_slug).id
      posts = Women.objects.filter(cat_id=cat_id)
      получается 2 запроса в БД, а если
      posts = Women.objects.filter(cat__in=Category.objects.filter(slug=cat_slug))
      то возвращать приходится что-то вроде
      'cat_selected': posts[0].cat_id
      как-то некрасиво. Может есть какой- нибудь красивый способ?

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

      @@rostislavmalyshev1775 Я так пробовал с SQLite, не прошло.

  • @пустой-и2д
    @пустой-и2д 3 ปีที่แล้ว +2

    Сергей не думали заниматься уроками по программированию?

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

      давно занимаюсь, но только в вузе

  • @4FacesShow
    @4FacesShow 3 ปีที่แล้ว +2

    Спасибо за курс,доступно и понятно объясняете. Только появился вопрос,как можно задать в url вместо 'post/' - '(название категории где я нахожусь)/

    • @alexvasko2973
      @alexvasko2973 2 ปีที่แล้ว

      Можно. path('/', show_post, name='post')

  • @НиколайАлексеев-в3р
    @НиколайАлексеев-в3р ปีที่แล้ว +1

    А что делать, если удалил миграции все, а затем добавил новые поля и получил проблему с no changes detected и таблички не создаются?

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

      Если уж так радикально пошли, то следует удалить и записи в таблице django_migrations с названиями файлов миграций, а еще лучше всю БД и создать файл заново (если SQLite используете). А на будущее, так делать не нужно.

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

    Здорово У меня какая то ошибка ProgrammingError at /admin/games/category/add/
    (1146, "Table 'dbsite.games_category' doesn't exist")

  • @Alex-ho8ke
    @Alex-ho8ke 3 ปีที่แล้ว +1

    В админ панели prepopulated_fields он автоматически переводит и ставит тере вместо пробелов, а как это сделать на сайте? Чтобы при создании статьи в форме не было показано слага, а он автоматически переводился и добавлялся как URL к этому посту?

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

      Что значит на сайте? На стороне клиента вы имеете в виду? Если так, то только через JS.

    • @Alex-ho8ke
      @Alex-ho8ke 3 ปีที่แล้ว

      @@selfedu_rus здравствуйте. Вот в админке prepopulated_fields для слага использует только латиницу, если просто ввести в поле slug кириллицу, то возникнет ошибка. Как сделать, чтобы он принимал и кириллицу?)

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

      никогда не пробовал, но подозреваю, что тогда свое поле создаете и обработчик, опять же на JS (т.к. это отрабатывает во фронтенде)

  • @СергейФролов-ъ5я
    @СергейФролов-ъ5я 4 ปีที่แล้ว +1

    Сергей, большое спасибо! А если бы мы не удаляли базу, а в начале сделали бы слаг необязательным, заполнили, а потом сделали обязательным - так бы сработало? Просто база может быть очень большой

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

      В SQLite у меня так не получилось, она не захотела менять поле с записями на обязательное. С другими СУБД надо смотреть. Так то мысль разумная, сам хотел именно так показать, но не удалось...

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

    Здравствуйте, может ли при условии соблюдения всех условий из примера не работать автоформирование Slug?

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

      все может быть, это же программирование )

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

    Спасибо за объяснение. Не могу установить в Linux Mint SqlateStudio

    • @newplanetfa11
      @newplanetfa11 3 ปีที่แล้ว

      db browser for sqlite попробуй

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

    Тем, у кого возникают проблемы с отображением картинок, мне помогло следующее: если в settings.py параметр DEBUG=True, то в urls.py надо прописать такие импорты:
    from django.conf import settings
    from django.conf.urls.static import static
    Далее, после объявления списка urlpatterns пишем следующее:
    if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

    • @Name-ko3qb
      @Name-ko3qb 2 ปีที่แล้ว +1

      не помогло

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

      не помогло=(

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

    prepopulated_fields это интересно, а как мне добавить в поле формулу? ну то есть мне надо что бы пользователь ввел в поле цену, в другое поле количество, в третье поле скидку, а в четвертое поле ему подставилось бы итоговая цена товара.

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

      через JS на стороне клиента

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

    👏👍

  • @Vladimir-re8xl
    @Vladimir-re8xl 4 ปีที่แล้ว +1

    А сколько планируется видео по этой теме?

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

      Как пойдет, я не планирую так детально, все по ходу. Только темы в целом продумываю - детали формируются в процессе создания курса.

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

    Кстати, по дз не очень получилось у меня как-то.
    def category(request, cat_slug):
    posts = News.objects.filter(category__slug=cat_slug)
    if len(posts) == 0:
    raise Http404()
    context = {
    'title': 'Отображение по рубрикам',
    'menu': navbar,
    'posts': posts,
    'cat_selected': тут нужно вывести ID категории, но я уже множество способов перепробовал, оно что-то не работает...
    }
    return render(request, 'index.html', context=context)

    • @Razilator
      @Razilator 3 ปีที่แล้ว

      Хотя можно в шаблоне убрать pk и вместно него вставить slug, и в cat_selected тоже вставить cat_slug

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

      @@Razilator def show_category(request, cat_slug):

      cats = Category.objects.all()
      cat = get_object_or_404(Category, slug =cat_slug)
      posts = SportsMans.objects.filter(cat_id = cat.id)

      if len(posts) == 0:
      raise Http404()
      context = {
      'posts': posts,
      'menu': menu,
      'cats': cats,
      'title': cat.name,
      'cat_selected': cat.id,
      }
      return render(request, 'sportsmans/index.html', context=context)

    • @Magpie2123
      @Magpie2123 3 ปีที่แล้ว

      @@ssyucfa блин, все так просто, а я крутил, крутил, недокрутил, вернул, полез комменты смотреть :)

    • @ssyucfa
      @ssyucfa 3 ปีที่แล้ว

      @@Magpie2123 да тоже есть такое, я, наверное, час над этим думал, а щас это уже легко для меня)

    • @Toksi86
      @Toksi86 3 ปีที่แล้ว

      Спасибо за объяснение. У самого сделать не получилось :)

  • @АлексМен-г6у
    @АлексМен-г6у 4 ปีที่แล้ว +1

    Он ломает своих противников! 19 летний мастер спорта по боксу в супертяжелом весе

  • @МишаБобров-и1з
    @МишаБобров-и1з 3 ปีที่แล้ว

    Единственное непонятно..
    Мы через функцию show_post не передаем объекты модели категорий cats,
    но они каким то образом отображаются в шаблоне show_post

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

      Это мы сделали через тег women_tags (см. предыдущее занятие)

  • @Magpie2123
    @Magpie2123 3 ปีที่แล้ว

    Все делал, что называется, ноздря в ноздрю, но в посте почему-то не отображаются картинки. В общем списке отображаются, в категориях отображаются, а вот в посте нет. При этом, строка с тэгом , где ссылка на файл картинки в браузере одинаковая во всех случаях. Что может быть? Даже не знаю как у гугла спросить.

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

      Да, это странно, а если по ссылке (из поста) нажать, картинка грузится? Может так как то определить?

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

      @@selfedu_rus блин, спустя 2 дня мучений нашел ошибку. Атрибут src от слова source - источник. А я, мочему-то решил что это scr - экран. 2 дня туплю, не могу отличить scr от src перечитал документацию по Django, по HTML и научился в браузере раскладывать страницу по буковкам. Складывал две строки в блокноте вместе, разницу не находил. Удалял все со страницы, оставляя только картинку - ничего. Сегодня психанул, скопировал строки с общего списка, пошло. Думаю, может символ не аски затесался, запустил посимвольное сравнение строк питоном, вот он мне и нашел.
      P.S. нужно еще пару лекций о тестировании записать, от таких как я @кодеров.

  • @alexanderselesnev3739
    @alexanderselesnev3739 3 ปีที่แล้ว

    Возможно я забегаю вперед, но вопрос по slug. Slug автоматически создается как показано в уроке. А как сделать это же самое в форме?

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

      Это уже frontend и делается средствами JS.

    • @alexanderselesnev3739
      @alexanderselesnev3739 3 ปีที่แล้ว

      @@selfedu_rus Спасибо.

  • @простоМалышОва
    @простоМалышОва 4 ปีที่แล้ว

    Здравствуйте, а такое можно сделать в Flask?

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

      да и я даже рассказываю как (есть плейлист)

  • @Channel25_25
    @Channel25_25 2 ปีที่แล้ว

    Добрый день. столкнулся с проблемой, что используя slug данные не отображаются (делал по аналогии с видео, много раз перепроверил,ошибок нет), а если использую id - отображается. в чем может быть проблема? уже 4 день мучаюсь и не могу понять. можете помочь?) спасибо

    • @AA-ld2ix
      @AA-ld2ix 2 ปีที่แล้ว

      Решил?

    • @fo1__
      @fo1__ 2 ปีที่แล้ว

      так как в таблице с постами в столбце cat используется айди, при сравнении в функции show_category, данные испльзуются разные. поэтому выводит пустую страницу

  • @Freddi.V
    @Freddi.V 3 ปีที่แล้ว

    Привет! Во-первых благодарю за потрясающие и бесплатные уроки по джанго! Большое спасибо! Но у меня возникла сложность. Я не знаю, почему у меня не выделяется выбранная категория и не подсвечивается синеньким, как у тебя. Я всё чётко повторяю за тобой, несколько раз пересматривал и так не нашёл тот момент, где выбранная категория начинает, подсвечивается синим. Подскажите, пожалуйста, ради Бога!

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

      Возможно в файле CSS (стили оформления для HTML). Сверьте тот, что в проекте с тем, что у вас.

    • @Freddi.V
      @Freddi.V 3 ปีที่แล้ว

      ​@@selfedu_rus ошибку не нашёл... приишлось заменить на Ваш base шаблон файл, чтобы заработало как надо.

    • @IvanBaklanov-h1n
      @IvanBaklanov-h1n ปีที่แล้ว

      Если у кого подобная ошибка, то нужно в show_category в словаре context, изменить cat_selected на cat.slug

  • @deniskrepak
    @deniskrepak 3 ปีที่แล้ว

    В дз не могу понять одну вещь: Что значит(а именно что такое cat__slug? С двумя нижними подчеркиваниями) posts = Women.objects.filter(cat__slug=category_slug)

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

      Вот здесь это подробно описано: proproprogs.ru/django/klassy-predstavleniy-listview-detailview-createview. В частности, фраза: "имя cat__slug - это способ обращения к слагу таблицы category через объект cat модели Women"

  • @vitaliiananiev5038
    @vitaliiananiev5038 3 ปีที่แล้ว

    Реально ли отображать формы ссылаясь на слаги?

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

      для форм не обязательно, но можно

  • @student6842
    @student6842 7 หลายเดือนก่อน +1

    Ну все бы так структуру БД редактировали. Удалил БД и ладушки ... :-(

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

    Ребят, как сделали слаг в категории? У меня пока что получилось добавление промежуточной переменной категории. UPD. Спасибо комментарию ниже, для того чтобы обратиться к слагу в модели Women, необходимо поставить у параметра двойное подчеркивание. т.е. не cat_slug=cat_slug, a cat__slug=cat_slug

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

      cat_selected Записал следующим образом: 'cat_selected': Category.objects.get(slug=cat_slug).pk. Чтоб не создавать промежуточную переменную для категории, не знаю, насколько это вообще правильно))

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

    после махинаций с удалением базы данных все статьи удалились🥲

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

    удалил к чертям эти SLUG
    ошибка не давала покоя Reverse for '' with no arguments not found. 1 pattern(s) tried: ['']

  • @eXceedPro-pl1gl
    @eXceedPro-pl1gl 2 ปีที่แล้ว

    первое видео от автора где я ничего не понял, если не смотрел прошлые занятия, то здесь ловить нечего. постоянно какие то названия появляются хй пойми откуда

    • @user-qg4oc6xp3b
      @user-qg4oc6xp3b 2 ปีที่แล้ว

      ДА это жесть просто

    • @НикБарыкин
      @НикБарыкин 2 ปีที่แล้ว +3

      Если не смотрел предыдущие занятия, тут действительно делать нечего)) Серия видео кагбэ связана - делаем сквозной проект

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

    def show_category(request, cat_slug):
    cat_id = Category.objects.filter(slug=cat_slug)[0].pk
    posts = Women.objects.filter(cat_id=cat_id)
    if len(posts) == 0:
    raise Http404()
    context = {
    'posts': posts,
    'title': 'Выбранная категория',
    'cat_selected': cat_id,
    }
    return render(request, 'women/index.html', context=context)

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

    def show_category(request, cat_slug):
    cat = Category.objects.get(slug=cat_slug)
    posts = Women.objects.filter(cat_id=cat.id)
    if len(posts) == 0:
    raise Http404
    context = {
    'posts': posts,
    'menu': menu,
    'title': 'Отображение по рубрикам',
    'cat_selected': cat.id,
    }
    В модели Categoties
    def get_absolute_url(self):
    return reverse('category', kwargs={'cat_slug': self.slug})
    В urls.py
    path('category//', show_category, name='category'),

  • @Pavel-er4hy
    @Pavel-er4hy 2 ปีที่แล้ว

    Доброй ночи!
    Слаг не заработал (по постам) по итогам урока. Постарался всё воспроизвести как в видео
    AttributeError at /post/ariana-grand/
    'Women' object has no attribute 'cat_slug'
    Читал ниже переписку, но к сожалению, оказалось недостаточно.
    Подскажите, пожалуйста, на что обратить внимание?
    И конечно хотелось бы сделать слаг и на категории.
    Вот вью:
    def show_post(request, post_slug):
    post = get_object_or_404(Women, slug=post_slug)
    context = {
    'post': post,
    'menu': menu,
    'title': post.title,
    'cat_selected': post.cat_slug,
    }
    return render(request, 'women/post.html', context=context)
    def show_category(request, cat_slug):
    posts = Women.objects.filter(cat__slug=cat_slug)
    if len(posts) == 0:
    raise Http404()
    context = {
    'posts': posts,
    'menu': menu,
    'title': 'Отображение по рубрикам',
    'cat_selected': cat_slug,
    }
    return render(request, 'women/index.html', context=context)
    И юрлс:
    from django.urls import path, re_path
    from .views import *
    urlpatterns = [
    path('', index, name='home'),
    path('about/', about, name='about'),
    path('addpage/', addpage, name='add_page'),
    path('contact/', contact, name='contact'),
    path('login/', login, name='login'),
    path('post//', show_post, name='post'),
    path('category//', show_category, name='category'),
    ]
    А ниже ошибка при переходе по категориям:
    NoReverseMatch at /category/aktrisy/
    Reverse for 'category' with keyword arguments '{'post_slug': 'aktrisy'}' not found. 1 pattern(s) tried: ['category/(?P[-a-zA-Z0-9_]+)/\\Z']
    {% for c in cats %}
    2 {% if c.pk == cat_selected %}
    3 {{c.name}}
    4 {% else %}
    5 {{c.name}}
    6 {% endif %}
    7 {% endfor %}
    c.get_absolute_url - выделено красным.

    • @Pavel-er4hy
      @Pavel-er4hy 2 ปีที่แล้ว

      Благодарю Stas Rubtsov (его ответ ранее в чате).
      def show_category(request, cat_slug):
      cat = Category.objects.filter(slug=cat_slug)
      posts = Women.objects.filter(cat_id=cat[0].id)
      if len(posts) == 0:
      raise Http404()
      context = {
      'posts': posts,
      'menu': menu,
      'title': 'Отображение по рубрикам',
      'cat_selected': cat[0].id,
      }
      return render(request, 'women/index.html', context=context)

    • @НикБарыкин
      @НикБарыкин 2 ปีที่แล้ว +1

      @@Pavel-er4hy т.к. по слагу мы точно не будем получать сразу несколько категорий, можно при получении категории сразу получить категорию, а не queryset:
      cat = Category.objects.filter(slug=cat_slug).first()
      Так и от необходимости обращаться к cat по индексу избавляемся, и, что более важно, избавляем СУБД от необходимости перелопачивать всю БД после нахождения первого подходящего результата (в больших БД это может сильно ускорить работу и сэкономить ресурсы сервера)