#17. Mixins - убираем дублирование кода | Django уроки

  Рет қаралды 49,152

selfedu

selfedu

Күн бұрын

Пікірлер: 153
@PrimaLuceAstronaut
@PrimaLuceAstronaut 3 жыл бұрын
Действительно, один из лучших каналов по питону. Спасибо, Сергей!
@xzxEMuJIbxzx
@xzxEMuJIbxzx 2 жыл бұрын
Для вас приготовлено столько мест в раю, сколько видео на этом канале)
@АлександрГильмияров
@АлександрГильмияров 2 жыл бұрын
Замечательные уроки Уже не первый курс прохожу, большое спасибо! Возможно кто-то сталкивался с проблемой как я Если вы добавили LoginRequiredMixin и у вас при обновлении страницы не вылетала 404 - почистите куки
@13mufasa
@13mufasa 2 жыл бұрын
От души)
@dneovu
@dneovu Жыл бұрын
или просто выйти из админки)
@alexw2074
@alexw2074 3 жыл бұрын
В urls добавил path('logout/', logout_func, name='logout'), В DataMixin после if not self.request.user.is_authenticated: user_menu.pop(1) добавил: else: user_menu[3] = {'title': "Выйти", 'url_name': 'logout'} В views добавил: def logout_func(request): logout(request) return redirect('home') Хз насколько это правильно, но это работает и я в шоке) Спасибо за уроки :)
@friend1cat
@friend1cat 3 жыл бұрын
Спасибо, Сергей!
@rostislavmalyshev1775
@rostislavmalyshev1775 3 жыл бұрын
Спасибо, Сергей! Как всегда все понятно. С Python 3.9 можно немного упростить: вместо return dict(list(context.items()) + list(c_def.items())) просто return context | c_def
@selfedu_rus
@selfedu_rus 3 жыл бұрын
Круто! Спасибо!
@rostislavmalyshev1775
@rostislavmalyshev1775 3 жыл бұрын
@@selfedu_rus Не за что! У Вас отличный образовательный контент. Многие платные курсы (которые я видел) отстают по полноте и "понятности" подачи материала.
@suhanoves
@suhanoves 3 жыл бұрын
А тем, у кого ещё нет 3.9 тоже можно написать чуть более питоняче {**dict1, **dict2}
@exe88cution
@exe88cution 3 жыл бұрын
@@suhanoves кстати нет. Если в словарях окажутся несколько одинаковых ключей, с одинаковыми значениями - выдаст ошибку. Но если указать так, как автор - ошибки не будет и запишется без дублирования) Я тоже хотел с умничать, но когда проверил - понял, что не совсем так всё глатко)
@suhanoves
@suhanoves 3 жыл бұрын
@@exe88cution какую ошибку у вас выдает интерпретатор? Ключ более позднего словаря перезаписывает более ранний, никакой ошибки не будет, о чем вы?
@RuVl_13
@RuVl_13 3 жыл бұрын
9:09 объединение словарей из 2-х исходных лучше делать с помощью {**x, **y}, а начиная с 3.9 - x | y Да, не по теме, но не зря ж я учил питон))
@selfedu_rus
@selfedu_rus 3 жыл бұрын
Да, спасибо! )
@RuVl_13
@RuVl_13 3 жыл бұрын
@@selfedu_rus Вам спасибо за урок!
@stasdumitrovych228
@stasdumitrovych228 3 жыл бұрын
Доброго времени суток, немного смутило то как вы обновляете словари, а именно строчка кода dict(list(context.items()) + list(c_def.items())). Ваш костыль работает, но правильно написать вот так context.update(c_def).
@selfedu_rus
@selfedu_rus 3 жыл бұрын
Да, согласен, спасибо!
@kirillnetreba
@kirillnetreba 2 жыл бұрын
только важно не писать context.update(c_def) в return, т.к. будет возвращено None. update изменяет словарь inplace и возвращает None. в return тогда надо писать context
@ОлегШенкер-з8ш
@ОлегШенкер-з8ш Жыл бұрын
Как раз хотел спросить в чем смысл такого объединения словарей через списки кортежей. Прямо голову сломал, пока думал зачем так сделано. И еще не понятно зачем название категории брать через списки постов, когда категория передана через слаг.
@userqh67vey6
@userqh67vey6 2 жыл бұрын
return dict(list(context.items())+list(c_def.items())) начиная с пайтон 3.5 можно сократить так: return {***context, *** c_def} (по две звездочки перед каждым словарем, почему-то в коментах вторая звезда обрезается ютубом) Лайк за видео
@MaksimShymanouski
@MaksimShymanouski 2 жыл бұрын
А начиная с Python 3.9 можно ещё легчe: context | c_def
@Alikhan-xm1xq
@Alikhan-xm1xq 2 жыл бұрын
@@MaksimShymanouski Спасибо за совет!
@raven_n7413
@raven_n7413 Жыл бұрын
return context.update(c_def) почему-то не работает...хотя вроде должен
@Apologet_2
@Apologet_2 Жыл бұрын
​@@raven_n7413нет, не должен, ты эту строчку кода должен записать в переменную, и потом ее вернуть
@raven_n7413
@raven_n7413 Жыл бұрын
@@Apologet_2 уже не помню, как разрешил данный момент, сейчас изучаю php mysql js
@denissavast
@denissavast 2 жыл бұрын
Огромное благодарю за ооотличнейший материал !
@dmitryzagorevskiy507
@dmitryzagorevskiy507 3 жыл бұрын
Очень качественный материал! Супер!
@siarheiulas6969
@siarheiulas6969 Жыл бұрын
Спасибо! Как всегда все подробно и доходчиво!
@ArturLuckyMan
@ArturLuckyMan 3 жыл бұрын
Преподаватель от бога! Годнота! Спасибо, Сергей.
@Максим-т5ш8и
@Максим-т5ш8и 2 жыл бұрын
Помню в курсе по ООП на степике как раз думал где же это применяется) теперь понятнее
@KravaDota
@KravaDota Жыл бұрын
Спасибо за видео! Как всегда отличное!
@anuarumarov4051
@anuarumarov4051 3 жыл бұрын
Спасибо! очень помогла статья на сайте, как раз то, что искал! Лайк + подписка!
@donfedor007
@donfedor007 3 жыл бұрын
Добрый день! Спасибо Вам за урок! Очень интересный!
@KikrAzz
@KikrAzz 2 жыл бұрын
Шикарно!
@exe88cution
@exe88cution 3 жыл бұрын
Всё классно, как и всегда впрочем) Единственное, как по мне, более оптимально было бы добавить ещё одну проверку в шаблоне, для показа "добавить статью" только авторизованным)
@LeeNick1976
@LeeNick1976 2 жыл бұрын
Сергей Ты Красавчик !!!
@gglinof
@gglinof 2 жыл бұрын
9:07 context.update(self.get_user_context(title='Главная стр'))
@muhammadislom7207
@muhammadislom7207 3 жыл бұрын
Спасибо.
@annapr_tr4799
@annapr_tr4799 2 жыл бұрын
spasibo za yrok !!!!
@АлександрПфейфер-н4и
@АлександрПфейфер-н4и Жыл бұрын
Возник вопрос: а зачем мы добавляем в представление класс, который проверяет, авторизован ли пользователь, если мы показываем этот пункт меню только авторизованным пользователям, да и вообще явно делаем эту проверку через user.is_authentificated?
@Ananacuk777
@Ananacuk777 2 жыл бұрын
по сути на 23 минуте решение проблемы простое def show_categories(sort=None, cat_selected=0): if not sort: cats = Category.objects.annotate(Count('women')) else: cats = Category.objects.annotate(Count('women')).order_by(sort)
@zakirovio
@zakirovio Жыл бұрын
интересно, узнал про метод списков copy(). До этого был знаком с модулем copy, у которого были функции deepcopy() и copy()
@Manu-ei6tn
@Manu-ei6tn Жыл бұрын
Подскажите, пожалуйста. В каких случаях в DJANGO нужно использовать self? Например, когда мы проверяем валидность формы form_valid, то для user=form.save() не используем self. Т.е. НЕ прописываем так self.user = form.save(). Почему так? И вообще, когда создаются запросы от пользователей, то для Класса представления создаются его экземпляры (экземпляры класса) для каждого запроса? Точнее, хотел понять, почему при одновременных запросах, эта переменная user присваивается правильно (т.е. для каждого пользователя (запроса) отдельно)? Так же и с функциями представлениями
@rafskot5793
@rafskot5793 Жыл бұрын
Но получается что на всех страницах, остается выбраная вкладка все новости, как это исправить
@crazyhowling2203
@crazyhowling2203 3 жыл бұрын
Так мало просмотров на таком контенте хорошем
@ahil7800
@ahil7800 3 жыл бұрын
Все же котиков смотрят. Там думать не надо.
@wrestler91100
@wrestler91100 Жыл бұрын
блок с фильтрацией категорий не работает. Все категории пропали. Попробовал записать так: {% if c.women_set.count > 0 %} отображает только категорию актрисы. По всей видимости проблема была в сортировке объектов в моделях Однако работает код только с таким условием {% if c.women_set.count > 0 %} , условие из видео так и не заработало
@alexstroidiy9496
@alexstroidiy9496 Жыл бұрын
На 22м 18с была импортирована Count в тихую.......... )))))))
@pilina_
@pilina_ 2 жыл бұрын
Спасибо за видео!
@АзамПополам
@АзамПополам 2 жыл бұрын
а нужно ли оставлять model = Women в WomenHome? Также нашел способ как объединить два словаря: вместо return dict(list(context.items()) + list(c_def.items())) пишем return {**context, **c_def}. Спасибо за видео
@envy1892
@envy1892 Жыл бұрын
Решение, для тех у кого при выборе меню "О сайте", появлялось меню "Добавить статью". def about(request): user_menu = menu.copy() if not request.user.is_authenticated: user_menu.pop(1) return render(request, 'teacher/about.html', {'menu': user_menu, 'title': 'О сайте'})
@urrchach
@urrchach Жыл бұрын
спасибо, твое решение единственное сработало
@urrchach
@urrchach Жыл бұрын
но для остальных вкладок не работает((
@tamerlan5067
@tamerlan5067 Жыл бұрын
в 9:43 вы объединяли context и c_def в один словарь, с помощью context = dict(list(context.items()) + list(context.items())) а нельзя ли было сделать просто: context = {**context, **c_def} ? или так лучше не стоит? Спасибо за ранее ответ, ваши видео просто супер! вы объясняете все в деталях просто и ясно, спасибо огромное за ваш труд
@selfedu_rus
@selfedu_rus Жыл бұрын
ваш вариант лучше, просто я когда делал ориентировался на старые версии Python, где так, вроде, не работало
@clearsky9174
@clearsky9174 Жыл бұрын
я в прошлом уроке изменил women_set на get_posts и так и оставил, из-за этого выскакивала ошибка в самом конце. Когда вернул все как было, ошибка пропала
@gkenjutsu
@gkenjutsu 3 жыл бұрын
Почему у меня после импорта и добавления в класс AddPage у меня не проверяется авторизован ли пользователь и не выводится Page not found 404, а выводится страница добавления статьи?
@gkenjutsu
@gkenjutsu 3 жыл бұрын
Понял в чём была причина, оказывается нужно выйти с аккаунта root в админ панели!
@DaryaSinitsyna-j2u
@DaryaSinitsyna-j2u Жыл бұрын
Нужно выйти из админки
@purple_owl
@purple_owl Жыл бұрын
зачем складывать словари, если можно в функцию get_user_context передать контекст
@silverus_morgan
@silverus_morgan Жыл бұрын
почему ссылка на русскоязычную документацию не работает ?((
@sainco3036
@sainco3036 3 жыл бұрын
Спасибо. Сергей, где лучше располагать проверки, в шаблонах или на уровне пайтона?
@selfedu_rus
@selfedu_rus 3 жыл бұрын
Смотря какие, если они относятся именно к шаблону и могут быть в будущем изменены, то лучше в шаблоне оставить. Если же относятся к выборке данных и это часть приложения, то, конечно, в приложении. В общем, с позиции здравого смысла это скорее определяется )
@sainco3036
@sainco3036 3 жыл бұрын
@@selfedu_rus понятно, спасибо.
@agrepin3458
@agrepin3458 3 жыл бұрын
Здраствуйте Сергей я хотел би шо ви розобрали модуль socket
@dimonk5250
@dimonk5250 2 жыл бұрын
Вопрос про команду на 23 минуте (if c.women > 0 ). Ранее мы этот код перенесли в файл "list_categories.html", как он у вас образовался в base.html?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
уххх... это было год назад, может забыл убрать, может так надо, если очень беспокоит, спросите в сообществе Django в телеграм-канале, там я думаю, все в курсе.
@AltairAnuarbek
@AltairAnuarbek 7 ай бұрын
Здравствуйте не могу открыть ваш сайт, ваш что хакнули?
@selfedu_rus
@selfedu_rus 7 ай бұрын
у меня все работает
@Anonim-im6ln
@Anonim-im6ln 2 жыл бұрын
Круто!) Дякую:)☺️
@brianryan4053
@brianryan4053 2 жыл бұрын
Скажите пожалуйста а какая разница между миксином и интерфейсом? Я так понял что то что называется интерфейсом в других языках называется миксином в Джанго
@selfedu_rus
@selfedu_rus 2 жыл бұрын
это разные вещи, интерфейсы лишь определяют публичные методы для взаимодействия с классами, а миксины наполняют классы конкретным функционалом
@brianryan4053
@brianryan4053 2 жыл бұрын
@@selfedu_rus Спасибо за ответ буду разбираться, в Питоне класс может наследовать много классов, поэтому нет интерфейсов, так я подумал что это что-то типа того, ну буду дальше учиться, всё остальное очень легко усваивается без напряжения
@БорисБондаренко-ы1л
@БорисБондаренко-ы1л Жыл бұрын
Добрый день, Сергей! Подскажите пожалуйста почему (на 9: 32) вы не выбрали метод update для словарей context. Результат от такого сливания словарей был бы идентичен. Имею в виду: context.update( c_def )
@selfedu_rus
@selfedu_rus Жыл бұрын
Да, вполне можно update, просто там еще старую конструкцию для слияния использовал )
@dimonk5250
@dimonk5250 2 жыл бұрын
Здравствуйте. Не могу понять почему при добавление команды {% if c.blog > 0 %} (23 минута) у меня пропадает меню. Все категории слева. И еще одно предложение, создать видео, про то, как отслеживать ошибки, при которых сайт загружается, в консоли нет ошибок, но нужный функционал не работает, например как при ошибке сверху.
@gladgalakas5929
@gladgalakas5929 2 жыл бұрын
та же проблема
@gladgalakas5929
@gladgalakas5929 2 жыл бұрын
не разобрался?
@lordir2
@lordir2 2 жыл бұрын
@@gladgalakas5929 попробуй у модели отключить сортировку, в прошлом видео про это говорилось
@RoTor_Ex
@RoTor_Ex 2 жыл бұрын
@@lordir2 Спасибо, помогло)
@JASKETfromCV
@JASKETfromCV 2 жыл бұрын
у меня так же не получалось. сделал через {% if c.news_set.count > 0 %} и заработало
@_sergeevich5827
@_sergeevich5827 2 жыл бұрын
Сделал, чтобы после авторизации выводилось имя пользователя вместо Вход.
@urrchach
@urrchach Жыл бұрын
Мда, делать "домашнее задание", чтобы сейчас некоторые функции у меня не работали, класс👍🏻
@dmitriygribkov1272
@dmitriygribkov1272 2 жыл бұрын
Здравствуйте,объясните,пожалуйста в base.html мы вставили c.women__count > 0: Аннотация добавила поле каунт,тут разобрался)а почему обращение к women(откуда эта переменная) в таком виде: с __ (два нижних подчеркивания)?
@AlexandrSpirit
@AlexandrSpirit 2 жыл бұрын
Непонятно, чем от обычного наследования отличается?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
ничем, паттерн Mixins - это прием расширения функциональности за счет добавления/удаления базовых классов
@ahil7800
@ahil7800 3 жыл бұрын
Добрый день. Отличный урок, как всегда. Я только не очень понял почему в файле utils.py в качестве menu мы назначили список. Как потом с этим работать?
@selfedu_rus
@selfedu_rus 3 жыл бұрын
Спасибо! Это лишь учебный пример. В реальности да, согласен, это все нужно выносить в БД.
@ahil7800
@ahil7800 3 жыл бұрын
@@selfedu_rus Я имел ввиду, что вместо списка можно было сделать словарь с названием страницы в качестве ключа. Тогда можно было в каждом классе при вызове метода get_user_context указать нужный ключ, и получить словарь контекста по этому ключу. Не знаю делают ли так на практике. Я сам только учусь. Но мне кажется так было бы удобнее чем выбирать из списка по индексу.
@neuroofun4627
@neuroofun4627 Жыл бұрын
Тем кто заморачивался по счет главного меню отдельным тегом: @register.inclusion_tag('women/main_menu.html', takes_context=True) def show_main_menu(context): request = context['request'] user_menu = menu.copy() if not request.user.is_authenticated: user_menu.pop(1) return {'menu': user_menu}
@urrchach
@urrchach Жыл бұрын
нет, к сожалению не работает, даже при чистке куки
@venator820
@venator820 3 жыл бұрын
Большое спасибо отличные видео только подскажите на 8:25 почему метод родителя вызывается через self а не через super() то есть get_context_data и get_user_context это оба метода родителей почему они вызываются по разному? Спасибо!
@RuVl_13
@RuVl_13 3 жыл бұрын
super() - это __init__ метод родительского класса
@КостяГорохов-б6с
@КостяГорохов-б6с 2 жыл бұрын
такой же вопрос
@veaceslavlefter
@veaceslavlefter Жыл бұрын
Оба метода можно вызвать через super(), это гарантирует что они будут вызваны из родительских классов. А если вызывать через self.method_name() то поиск метода идет сначала внутри класса, потом в родительских.
@Architect_Mobile
@Architect_Mobile 2 жыл бұрын
Мне кажется архитектурно так решать проблему не верно , наследование - это когда на основе одного объекта создаешь другой , а не просто переопределяешь какие-то функции. Ведь не все совпадение кода является дублированием , такие задачи на мой взгляд решаются внедрением зависимостей, а не наследованием
@selfedu_rus
@selfedu_rus 2 жыл бұрын
Решений одной и той же задачи может быть множество.
@brianryan4053
@brianryan4053 2 жыл бұрын
Судя по комменту вы пришли из ДжаваСкрипт. Наследование в ДжаваСкрипт - это совсем не то что наследование в других языках.
@brianryan4053
@brianryan4053 2 жыл бұрын
Только в ДжаваСкрипт наследование связано с объектами, во всех остальных языках наследование связано с классами
@Architect_Mobile
@Architect_Mobile 2 жыл бұрын
@@brianryan4053 ххахахах)) Класс - это описание объекта))) По сути это одно и тоже))) Класс описывает из чего состоит объект))
@rafskot5793
@rafskot5793 Жыл бұрын
user_menu = menu.copy() if not self.request.user.is_authenticated: user_menu.pop(7) Не убирает нужный элемент, кто нибудь разобрался?
@helish_88
@helish_88 3 жыл бұрын
а как сделать тоже самое для админки? ограничить админку по ИП к примеру? не смог найти хороших примеров
@crazyhowling2203
@crazyhowling2203 3 жыл бұрын
Не нашел случайно? Мне бы тоже ограничить админку не помешало
@helish_88
@helish_88 3 жыл бұрын
@@crazyhowling2203 поменяй название, типа не /admin а /my_admin
@crazyhowling2203
@crazyhowling2203 3 жыл бұрын
@@helish_88 Спасибо, уже не надо) Я сделал :)
@helish_88
@helish_88 3 жыл бұрын
@@crazyhowling2203 а как сделал?
@MobileLegendsImmortal
@MobileLegendsImmortal Жыл бұрын
Не могу решить ошибку по выведению рубрик по которым есть статьи: cats = Category.annotate(Count('women')) у меня Count светиться красным и потом ошибка в браузере. Может что-то нужно было импортировать для работы?
@MobileLegendsImmortal
@MobileLegendsImmortal Жыл бұрын
Обнаружил, что не импортировал метод, вдруг кому на заметку.
@KonstantinKazancev
@KonstantinKazancev Жыл бұрын
У меня тоже самое! Не пойму что нужно импортировать? Тоже, что и в видео не импортируется, возможно из-за того, что другие версии. Подскажите, как вы решили эту проблему?
@MobileLegendsImmortal
@MobileLegendsImmortal Жыл бұрын
@@KonstantinKazancev я уже и забыл о чем речь и туго помню так как отвлёкся от Джанго, на сколько я помню, я решил просто отказаться от способа миксте и без него все делал. А ещё мало кто рассказывает что в сам начале когда создаёте модели, то магическим метолом нужно __str__ и дальше указываем там self. Title то нужно указать испорт всех полей, иначе в доступе в путях будет передаваться только тот самый Тайтл и больше других данных не вызвать… а на счёт кстати этой проблемы я вроде бы ее решил непосредственно в view . Потом загляну , скину код
@KonstantinKazancev
@KonstantinKazancev Жыл бұрын
@@MobileLegendsImmortal Спасибо, что ответили мне!) Я нашел решение проблемы!)
@MobileLegendsImmortal
@MobileLegendsImmortal Жыл бұрын
​@@KonstantinKazancev создал отельный файл _tags @register.simple_tag(name='get_cats') # превращаем функцию в тег при помози декоратора def get_categories(): cats = Category.objects.annotate(Count('women')) return cats дальше во вьюшке обратился через одну модель к другой так вот def get_queryset(self): return Women.objects.filter(cat__slug=self.kwargs['cat_slug'], is_published=True) path('category//', cache_page(60)(views.show_category.as_view()), name='category'), path('post//', cache_page(60)(views.show_post.as_view()), name='post'),
@yreeinord3573
@yreeinord3573 3 жыл бұрын
def get_context_data(self, *, object_list=None, **kwargs): context = super().get_context_data(**kwargs) c = Category.objects.get(slug=self.kwargs['cat_slug']) c_def = self.get_user_context(title='Категория - ' + str(c.name), cat_selected=c.pk) return dict(list(context.items()) + list(c_def.items())) С этим кодом у меня в шаблон не выводится d if,kjyt base.html как поправить что бы выводился
@ShadowStormlq5mwdasd
@ShadowStormlq5mwdasd 2 жыл бұрын
А разве не нужно обращаться к базовым классам на прямую при множественном наследование - это же рациональниее чем пологаться на порядок записанных классов, вы наверное скажете - а вдруг поменяется название класса, а я скажу а вдруг поменяется порядок записанных классов? и я так понимаю при context = super().get_context_data(**kwargs) оно сначало ищет в DataMixin а потом в классах вьюх, а не быстрее ли будет ListView.get_context_data(self, **kwargs)?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
при множественном наследовании стараются базовые классы делать с инициализатором без параметров, тогда порядок их следования не имеет большого значения, ну и при разработке классов, конечно же учитывать, что порядок может измениться
@f-s_interpreter
@f-s_interpreter 2 жыл бұрын
Подскажите пж c-def это придуманнае название или встроенное?
@selfedu_rus
@selfedu_rus 2 жыл бұрын
def - это встроенное
@f-s_interpreter
@f-s_interpreter 2 жыл бұрын
@@selfedu_rus я не про деф. Вы когда создавали второй context назвали его c_def
@selfedu_rus
@selfedu_rus 2 жыл бұрын
@@f-s_interpreter а, это обычная переменная, не более того, можете ее назвать сами как хотите ))
@f-s_interpreter
@f-s_interpreter 2 жыл бұрын
@@selfedu_rusспасибо вам огромное. Ещё хотел бы предложить идею сделать, если есть свободное время, просто пустой проект и как выложить на бесплатные сайты ( Render. Com, Railway. App и Cyclic). На английском просторе говорят это замена хероку
@ВладимирРодионов-з2т
@ВладимирРодионов-з2т 2 жыл бұрын
А как сделать так, чтобы если пользователь не авторизован он вообще не видел кнопку "Добавить статью"?
@showrun4747
@showrun4747 Жыл бұрын
пересмотрите ещё раз, только внимательнее ))
@РинатХайретдинов-н3ц
@РинатХайретдинов-н3ц Жыл бұрын
а можно убрать пустые категории так: Category.objects.annotate(total=Count('product')).filter(total__gt=0) по предыдущему уроку делал
@jamjam3337
@jamjam3337 Жыл бұрын
👏👍
@АндрейАндреев-г4ц
@АндрейАндреев-г4ц 2 жыл бұрын
Те кто сделал домашнее задание по вынесению меню из шаблона Base верните кусок кода обратно в base
@LeeNick1976
@LeeNick1976 2 жыл бұрын
Спасибо. Равных по джагно обучению нет !!!
@ShadowStormlq5mwdasd
@ShadowStormlq5mwdasd 2 жыл бұрын
И кста откуда DataMixin взял self.request? Это же не может быть из дочернего класса - то есть это как-то свзяано с классом вьюхи при вызове в дочернем?
@citricmint_forstudy4608
@citricmint_forstudy4608 2 жыл бұрын
возник такой же вопрос, скажите пожалуйста, вы разобрались?
@bocik2854
@bocik2854 2 жыл бұрын
Да
@a_gassi
@a_gassi Жыл бұрын
А не проще меню и сайд-бар с категориями просто внести в базовый шаблон?
@NoName-sd8xg
@NoName-sd8xg 2 жыл бұрын
Очень интересно, но ничего не понятно
@АртемТит-в5ь
@АртемТит-в5ь 2 жыл бұрын
Здравствуйте объясните п
@zakchips
@zakchips 3 жыл бұрын
спасибо.попробовала поэкспериментировать с "глобальными" переменными, доступными в любой template. Пришла к выводу, что лучше в таком случае или template tags or contex_processors. не знаю ещё,как это отражается на скорости, но может просто забыть прописать в каком-нибудь классе миксин и долго бороться с необнаруженной переменной и её значением.
@selfedu_rus
@selfedu_rus 3 жыл бұрын
В Mixins можно прописать дефолтное значение переменной и не должно тогда быть проблем.
@nikitayasnev
@nikitayasnev Жыл бұрын
очень непонятно
@python4.0
@python4.0 Жыл бұрын
cats = Category.objects.filter(women__is_published=True).annotate(women__count=Count('women')) у меня только с таким вариантом заработало, может кому-то понадобится)
@InstituteOfIndependence
@InstituteOfIndependence Жыл бұрын
Может кто-нибудь знает как сделать редирект к админке используя имя маршрута? Я получаю ошибку: Reverse for 'admin' not found. 'admin' is not a valid view function or pattern name. Файл coolsite.urls: urlpatterns = [ path('admin/', admin.site.urls, name='admin'), path('', include('women.urls')), ] Файл women.views: login_url = reverse_lazy('admin')
@LukasFeinberg
@LukasFeinberg Жыл бұрын
20:46 И если вы делали это через пользовательские теги, как давал задачку автор, то ничего не случится :) Сначала нужно вернуть вывод верхнего меню как обычно.
@SITARNET
@SITARNET Жыл бұрын
Может кто подскажет как это сделать? Я выводил меню через пользовательский тег!
@Tailiira
@Tailiira Жыл бұрын
@@SITARNET уже поди не актуально, но мало-ли кто ещё тут когда будет искать - я так сделал: @register.inclusion_tag('mobs/list_menu.html', takes_context=True) def show_menu(context): request = context['request'] user_menu = [] menu = Menu.objects.all() for i in menu: user_menu.append(i) if not request.user.is_authenticated: user_menu.pop(2) return {'menu': user_menu}
@urrchach
@urrchach Жыл бұрын
​​@@Tailiiraпривет, у меня Menu подчеркнуто красным, хотя оно есть в файле с тегами, почему так?(
@nazi424
@nazi424 10 ай бұрын
from lastnews.views import pageNotFound, serverError, accessblocked, requestError File "E:\python\URN\lastnews\views.py", line 6, in from URN.lastnews.util import DataMixin ModuleNotFoundError: No module named 'URN.lastnews'
@ВиталийКалиниченко-х8э
@ВиталийКалиниченко-х8э 3 жыл бұрын
Спасибо, Сергей!
Jaidarman TOP / Жоғары лига-2023 / Жекпе-жек 1-ТУР / 1-топ
1:30:54
БОЙКАЛАР| bayGUYS | 27 шығарылым
28:49
bayGUYS
Рет қаралды 1,1 МЛН
Wednesday VS Enid: Who is The Best Mommy? #shorts
0:14
Troom Oki Toki
Рет қаралды 50 МЛН
Vampire SUCKS Human Energy 🧛🏻‍♂️🪫 (ft. @StevenHe )
0:34
Alan Chikin Chow
Рет қаралды 138 МЛН
#16. Основы ORM Django за час | Django уроки
1:03:59
Всё об исключениях и работе с ними в Python
30:34
Диджитализируй!
Рет қаралды 51 М.
КАК УСТРОЕН TCP/IP?
31:32
Alek OS
Рет қаралды 247 М.
Jaidarman TOP / Жоғары лига-2023 / Жекпе-жек 1-ТУР / 1-топ
1:30:54