Уроки Django 3 - классы ListView и DetailView django, страница с фильмом - урок 7
Вставка
- Опубліковано 14 жов 2024
- Классы на ListView и DetailView django. В уроке разберем построение urls в django. Что такое pk и slug. Реализуем страница с описанием фильма.
Уроки django 3 для начинающих.
Не забудь подписаться на канал, чтобы не пропустить новые видео.
Проект на GitHub - clck.ru/LqYJE
--=--
Подписывайся на Telegram канал - t.me/django_sc...
О веб разработке и программировании простым языком.
То что поможет стать высококвалифицированным специалистом.
Спонсорство - boosty.to/djan...
--=--
🔥Провожу индивидуальные занятия по python и веб разработке (django, fastapi, flask, javascript).
Обучаю с нуля, а так же провожу консультации для мидлов и синьоров
--=--
#django #уроки #python #djangoschool
Подписывайся на Telegram канал - t.me/django_school
О веб разработке и программировании простым языком.
То что поможет стать высококвалифицированным специалистом.
Первый лайк за мной :3 Годно, хотя было бы не плохо если было бы больше объяснений, это всё же уроки
Спасибо за урок)
Следует расшифровывать аббревиатуры, чтобы не было мешанины из символов в голове. Для примера, pk - это primary key.
нет это ПэКа
Наконец хоть кто-то обьяснил как расшифровуется эта аббревиатура!
Лайк от меня.
Для тех у кого не показывается список фильмов на 11:00 нужно в шаблоне, в цикле, вместо прохода по списку *_movies_* указать *_object_list_* т.к. если вы используете классовые вьюшки, то Django по умолчанию добавляет объекты моделей в список *object_list* , но все же, если вы хотите дать этому списку своё название - добавьте атрибут *context_object_name = 'movies'* в вьюше для *MoviesView*
Спасибо, очень помог совет!
спасибо чувак
Даже не знаю с чего начинать, весь в эмоциях, я сам самоучка и думаю что проще уже не куда. Пусть youtube сделает ежедневную кнопку лайк которую я буду нажимать каждый божий день до конца дней моих на этом канале.
пожалуй поставлю 2й лайк тут и это будет второй лайк для Django School.
@@Jon-s4s спасибо
Не за что Вам спасибо !!!@@DjangoSchool а вот и третий и четвертый.
Только начал изучать питон. Уроки очень интересные и понятные. До этого читал документацию, было вообще не понятно что такое миграции, админка и т.п. Человеку с минимальными знаниями очень полезно. Благодарю
Спасибо за урок. Очень доходчиво. Это полезная информация
Спасибо за Ваш труд.
желаю всего наилучшего очень полезный курс , постараюсь просмотреть все
Михаил шрифт пожалуйста больше. Остальное огонь
Учту
Успехов Вам, Михаил!
Спасибо за урок
Пожалуйста
Я чего-то пропустил откуда взялся movie_detail.html? В верстке его не было, по-моему...
Это файл moviesingle.html
У кого на 12:35 не выводит на сайте как на видео, то нужно в папке templates переименовать папку movies в movie, так как наша модель называться Movie и шаблон сформулирует movie/movie_list
спасибо
А почему тот же MoviesView и MovieDetail(которые в начале ) не реализовать через обычные функции ?
Спасибо за труды. А подскажи, на вскидку: сколько времени нужно, чтобы освоить все классы? (атрибуты и методы). Ты их наизусть все помнишь, или периодически поглядываешь в документацию? И с какими чаще всего приходится сталкиваться, а с какики крайне редко?
Я их помню. Если не помню, то читаю код. Освоение придёт с практикой, зависит от того как часто использовать.
@@DjangoSchool как бы это все запомнить то)))
@@black_grizzly практикой
10:57 Здесь не совсем понятно зачем мы в MoviesView(ListView) инициализируем поле model = Movie, ведь эта запись создаст нам QuerySet из Movie.objects.all() в то время как мы хотим сделать выборку с учетом draft нашей модели и для этого инициализируем поле queryset=Movie.objects.filter(draft=False)? То есть если мы объявляем поле model то желаем получить все объекты, если же мы хотим модифицировать запрос пишем queryset, или я чего-то не понял?
В принципе, твоя логика совпадает с логикой Django
Возможно я не внимательно смотрел, но кажется вы забыли упомянуть как образуется контекст для ListView и DetailView
def get_context_data(self, **kwargs):
article = self.get_object()
last_comments = article.comment_set.order_by('-timestamp')[:10]
comment_form = CommentForm()
data = super().get_context_data(**kwargs)
data['comment_form'] = comment_form
data['last_comments'] = last_comments
return data
И в темплейте используешь {{ comment_form.as_p }} {{ last_comments }}
@@sogorich Спасибо)
От куда взялся html шаблон detail? еще на прошлом уроке его не было. В архиве с версткой тоже нет его
Это кажется переименованный файл "moviesinge.html
Здравствуйте Михаил, подскажите что делать если при запуске выдает вот такую ошибку:
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 1014, in _gcd_import
File "", line 991, in _find_and_load
File "", line 975, in _find_and_load_unlocked
File "", line 671, in _load_unlocked
File "", line 783, in exec_module
File "", line 219, in _call_with_frames_removed
Спасибо большое за ваш труд, изучаю джанго по вашим видео.
такой вопрос, а всплытие подсказок в html документах в джинжа это только в проф версии пайчарм? или что то можно сделать с комьюнити версией?
Можно поискать плагины для html
Большое спасибо за уроки. Очень полезно.
Подскажите пожалуйста, почему перестал выводиться список фильмов после того, как я изменил класс c View на ListView. Делал все по уроку и до этого все работало. Заранее спасибо )
Присоединяйтесь к вопросу
Импорт сделали?
@@СашаСемаков-ь9щ дело не в импорте - мы тело заполняли через цикл for, а данные для этого цикла приходили из контекста movie_list. Контекст пропал и пропало содержимое тега body. Меня вылечили смена имени класса главной модели и последующая миграция БД.
А подскажите пожалуйста а где брать файл movie_detail.html ????
Отличный урок! Как он понимает какой контехт передавать в шаблон в классе ListView
Внутри ListView есть метод get_context_data(). Он делает выборку из БД по модели, которую ти указал.,
В данном случает это Movie.objects.all(). Если бы указали модель Blabla, то внутри было бы Blabla.objects.all()
Вопрос, по умолчанию на ListView данные должны быть в object_list. Как вы получили данные через movie_list?
Указана модель в классе
Привет, надеюсь ты ответишь на вопрос) Спасибо большое за такие видео)
У меня возникла такая проблема(как я считаю, все из-за нее) когда ты добавляешь ListView и DetailView у тебя не пропадает иконка "html" слева от class MovieDetailView(DetailView). У меня же наоборот, она пропадает. Возможно ли это исправить? И вообще возможно ли , что это ошибка ?
А у меня как-то кортинки на главной не правильно стоят, не рядом как у вас , и не одного размера. Почему так может быть?? А когда перехожу на страничку фильма вообще нет постера..
Привет !
Помогите плиз понять. После того как поменял во вьюхе View на ListView, получил ошибку следующего содержания
_reverse_with_prefix() argument after ** must be a mapping, not set
для следующей строки в файле movie_list.html
перепроверил все. полностью все совпадает с тем что на GitHub выложено
from django.views.generic import ListView, DetailView
Есть одна проблемка, когда ты у видео используешь модули, они у тебя автоматически импортируются, но ты иногда забиваешь об этом сказать и за этого я искал пол часа ошибку, пока не понял что это нужно импортировать модуль))) Или скажи как сделать так чтобы автоматически делался импорт
Хорошо учту это. Для импорта в pycharm я использую alt+enter
@@DjangoSchool Спасибо)
Так хорошо начинал, но начал пропускать моменты пойду искать дальше
ммм... я уже знаю, на чём ты закончишь. На документации. И будешь прав, если да.
@@idopshik мм уже прошёл курсик на английском, а ты только начал? увы не закончишь =(, могу посоветовать канал если - документация читается?
Вёрстка жесть)
Help/ откуда взялся файл movie_detail.html . Когда он появился и где код к нему.
В описании ссылка
@@DjangoSchool Она не работает
Блин, много времени на верстку убивается)))) ППЦ))))Так то все огонь)))
Здравствуй, не понял с movie_list, почему он именно переадресовывает на конкретный шаблон!? Это все из-за ListView!?
Да, тут можно узнать подробнее ua-cam.com/video/ooX7r4iQaZ4/v-deo.html
@@DjangoSchool Благодарю, ознакомлюсь
Если автор использует заготовки html-шаблонов, то имеет смысл прикладывать их к уроку, иначе просто невозможно проходить курс. Файлы из готового проекта отражают финальные шаги, логика которых не прописана на ранних этапах.
в предыдущем уроке есть ссылка на репозиторий в гит с версткой. шаблон movie_detail там называется как moviesinegle) надеюсь это поможет другим
Здравствуйте, Михаил. Не могли бы вы подсказать как решить данную проблему. Делаю сайт по вашему шаблону в котором имеются товары, и весь вопрос заключается в том, что фотографии в listview как и остальная информация из базы данных отлично отображается в шаблоне, а в detailview все кроме фотографий(( Медиа и статика прописаны и настроены правильно, проблема касается суто detailview.
Здравствуйте, без увиденного кода мне сложно ответить. Напишите в нашу группу телеграм. И скриншот или ссылку на код скиньте.
с трудом не сразу но прошел. я свой пишу проект , но все фишки что объясняются пробую,, появляются отличия и усложняется все и .изза другого именования и структуры..
А в результате получится сайт на котором можно будет смотреть фильмы, или будут только трейлеры?
Будет показан пример на трейлерах и фильмах находящихся в открытом доступе , а вы можете далее эту возможность расширить. Так как нужно следить за не нарушением авторских прав.
@@DjangoSchool ок, а как можно держать на сервере фильмы в открытом доступе, например если хочешь делать аналог ютуб, все нужно хранить на серваке?
@@АнтонНебожинський ну для этого нужен мощный сервер, можно само видео хостить в удалённом дата центре
Привет! Делаю на основе твоих видео твой проект и столкнулся с ошибкой 405 при переходе по ссылке на страницу подробнее о фильме. Перепроверил все сотни раз, попробовал разные типы перехода по ссылке, как в твоем видео и все равно ошибка 405-страница недоступна. джанго пишет Method Not Allowed (GET): /dima/
Method Not Allowed: /dima/. Погуглил, ничего конкретного не говорится. Есть идеи?
Возможно ты csrf_token забыл указать.Обычно такая ошибка именно с этим связана
Примерно в 8:00 ты говоришь что есть несколько методов, у меня вопрос чем они хуже ?
Ничем
можете ответить? as_view() и slug что это такое и где почитать про это
ua-cam.com/video/ooX7r4iQaZ4/v-deo.html на 8-ой минуте
@@DjangoSchool спасибо
Подскажите ,пожалуйста.
Сервер не запускается, ошибка в queryset .
'Manager ' object has no atribute 'filter '
Подскажите, как исправить
objects в конце s
@@DjangoSchool а сюда нельзя никак скрин приляпать? )
В коде у меня написано
queryset = Movie.objects.filter(draft=False)
Выдает ошибку в этой строке и такое пояснение :
AttributeError : 'Manager'object has no attribute 'filter'
@@DjangoSchool Отбой, я в слове filter забыл букву t)
Спасибо большое за внимание)
@@ДенисЧернов-у7х пожалуйста
Михаил, у меня не получилось открыть ссылку, ни прямым вводом адресную строку pk, ни url, ошибка TypeError at /terminator/
get() got an unexpected keyword argument 'slug' , Ничего не понимаю, второй день туплю, что не так?
Можете не отвечать, ошибся в описании класса
2ч искал почему пропали кино с главной страницы, а оказалось, что он ищет переменную movie_list которую он создал из модели и приставки list , а в цикле у меня стояла моя переменная которую я придумал из головы
мне пришлось использовать template_name выводила ошибка
Можете залить в git исходную вёрстку сайта?
Хорошо
@@DjangoSchool спасибо
@@popcorn_833 github.com/DJWOMS/django_movie_template
@@DjangoSchool Спасибо
написал функцию get_absolute_url и сделал все как на видео. При переходе по ссылке просто обновляется главная страница. Кто знает почему так?
все нашел ошибку. Неправильно указал вместо movie.get_absolute_url написал movies..get_absolute_url
значит ListWiew и DetailView это встроенные в django миксины?
Ага
Как сделать так , чтобы когда добавляешь категорию мультфильмы, рендарилась новая, чистая страница ? Это постоянно нужно прописывать вьюхи и классы ?
Привет, не совсем ясен вопрос. Что значит новая страница?
@@DjangoSchool мне не ясно , зачем мы делали категории. Если добавить категорию любую , сериалы например, то на сайте отображаются те же фильмы , которые были добавлены ранее. Вопрос в том что, хочу добавить новую категорию и чтобы выводились фильмы соответствующие ей.
У меня не выводятся картинки.И я запринтил {{movie.poster.urls}} в HTMl и получил такой output
/media/movies/%D1%82%D0%B5%D1%80%D0%BC%D0%B8%D0%BD%D0%B0%D1%82%D0%BE%D1%80_JRUYVaw.jpg
Подскажите что делать?
movie.poster.url
У меня в models.py не видит reverse, что делать?
Импортировать
Ура, просто нужно прописать from django.urls import reverse
@@DjangoSchool спасибо
@@DjangoSchool когда импортируешь что-то озвучивай пожалуйста что и откуда, а то ты горячими клавишами тыкнул, а народ потом полчаса ошибки ищет и до дыр смотрит видео. Урок на 13 минут, а ты сидишь и полчаса ищешь где ошибка.
А если ещё этот reverse не от туда импортировать, то вообще будет показывать ошибку функции, и тогда уж эту ошибку можно час разбирать
А дааа, увидел, насколько я помню qeryset можно не указывать в ListView, он автоматически генерируется дажнго)
Да джанго вообще можно ничего не указывать, он сам всё делает )
Защита от дурака: проверка в шаблоне на модерации или нет перед подробным выводом. Вряд-ли кто-то будет в адресной строке ссылки к фильмам или постам подбирать, но все-же может где-то пригодится в редких случаях.
Как писал Дуглас Адамс "единственная ошибка проектировщиков абсолютно надежных систем это недооценка изобретательности клинических идиотов".
вот я не понимаю movie_list.html как он стал главной страниц?
Все дело В ListView, он автоматически генерирует добавляя _list - так он работает. Если не нравится такое поведение по default, то можете переопредилить такое поведение с помошью template_name = "movies/blablablabla.html". Совет : всегда читайте ДОКИ по всему, что для вас ново, автор не будет все объяснять он пакжет только Best Practice.
for, endfor - это из какого языка?
Шаблонизатора django
Мало понятно, как работает DetailView. Хотелось бы, чтобы по подробнее рассказано было
ua-cam.com/video/ooX7r4iQaZ4/v-deo.html Более подробно рассказываю об этих классах
После того как поменял на ListView у меня слетел вывод на HTML страничке.. Довольно странно, ведь все делал также, ну может быть и пропустил чего. Может быть вы знаете, какую-либо распространенную ошибку, может я один из них, кто сделал тоже самое : )
Я нашел решение, данной проблемы, ну для меня это была проблема, не судите строго.
В общем, я то делаю с другими моделями и все другое. Он значит ищет файлы по названию приложения это раз, как я понял. templates/название вашего приложения/model_name_она сама добавит окончание(но вы должны указать list or detail).html
Все что выше я пофиксил быстро, а вот с выводом немного подолбился, вкратце. В HTML когда бегаем:
{% for что-то in model_name_list %} -> это если вы указываете ListView -> наследование от этого класса
С DetailView все намного проще, там она понимает, что на странице должна быть одна модель, она такая окей мне пожалуйста только имя модели, все остальное сделаю за тебя.
В HTML пишете
{{ model_name.атрибут, который вам нужен }}
Если вдруг, помог кому-либо не поскупитесь поставить лайк. Можно даже и не мне, а вот этому уроку, я считаю автор этих уроков, заслужил ваши овации. Спасибо Михаил, всех благ!
@@nikita6625 docs.djangoproject.com/en/3.1/ref/class-based-views/generic-display/#detailview
@@nikita6625 Вот и тебе спасибо, что не поленился и размотал этот нюанс)) Лайк тебе!)
@@devcryptodude Не за что)
Я рад что, кому-то смог помочь в этом, правда хехе я уже DS.
Ушел я от того, что сайты когда-то делал )
во первых на гитхабе совсем не то что в уроке, во вторых я еле успеваю ставить паузы и переписать код с видео не говоря уже о понимании того что написал, где функция берет атрибут ListView ?, чего на 13:11 минуте показываешь другой код который переписывал, нужно также вернуть все обратно или что? нету никакого толка от урока если я просто тупо все перепечатываю под копирку..
ответь пожалуйста как ты сам учился?
Сотрю на скорости 1,75, всё нормально. Это касается бошки - если в Ашане покупал, нужно смотреть на скорости где-то 0,000000001 тогда может поймешь, а если она у тебя Азиатская, то спокойно смотри на скорости 1,25-2,00
Чел,обращай внимание на ошибки.Будь ты внимательнее ты бы заметил,что ListView и DetailView импортируются из django.views.generic
@@muhamadrasulabdulhayev9360 😂😂😂😂 ну ты и дичь сказанул. как практика показывает Азиатам такое смотреть бесполезно даже на скорости меньше 0,000000001 😂😂😂😂
Вопрос не по теме.
Что за тема idę?
Плагин Material theme ui - ocean
Вот когда появились html все спало неясно.
Откуда они взялись, что в них есть(
под предыдущими видео ссылка на templates файлы, клонируй к себе и прикручивай к проекту,
github.com/DJWOMS/django_movie_template
если есть вопросы - в телеграм канале помогут, если не понятно попробуй что то маленькое сверстать на bootstrap, там просто
Я тоже не понимал других ютуберов, когда они переходили в html. Но, когда я изучил html я все стал понимать. Вероятно, у вас тоже такая проблема, если это так, то советую сначала начинать с html, а потом перейти в django
@@-r371 угу, но автор ведь говорит - курс для тех, кто ваще не шарит програмирования.
@@ValeriiSynenko Джанго это фреймворк, и чтобы лучше понимать как он работает то лучше научиться основам веб-разработки а потом лезть в эти дебри.
@@sql_upgrade так видео же направленьl на начинающих.
А по факту - то сюда, то туда, что тут не неясного?
а где ссылка на movies.html
В смысле?
@@DjangoSchool в гидхабе нет этого файла
@@НурбекНурбай-с4х В описании 6-го урока
@@DjangoSchool movie_detail.html там нет, а в ролике есть
@@maystrenko_byv_tyt нашли эту ссылку?
Без обид но ничего не понял старайся объяснить спасибо хотябо могут гуглит что ты говорил
один забытые тобой тег в видеоролике, испортил весь проект. зачем вы автоматически импортируете теги.
Ты уж давай или "здравствуйте" или "ТЫ на канале", а то как-то так, не очень получается 😁
назвать это обучением нельзя)) так чисто чел пилит сайт и показывает на видео)
ssilka ne rabotayet na githab
github.com/DJWOMS/django_movie/tree/0043c4dd9abb3c31e6bb9d93fe6db7759b2e5673
музыка в фоне просто отвратительна и невыносима
Можете подсказать почему то у меня второй терминатор съехал вниз и стал маленьким и узким вроде css файлы не трогал не знаю в чем дело
Привет, просто так подсказать тяжело, это нужно смотреть