progammistDec. 26, 2020, 5:29 p.m.
Как вывести статьи и профиль
Всем привет!
Вопрос такой, у меня есть мини-блог, есть статьи и профиль(страницы) пользователей.
Статьи я вывожу по адресу site/названиестатьи
Кабинет пользователя я хочу вывести по адресу site/юзернейм
views.py (статьей):
def post_detail(request, slug): post = get_object_or_404(Post, slug=slug) return render(request, 'post_detail.html', {'post': post })
views.py (пользователей):
class UserProfileView(DetailView): template_name = 'users/profile/profile-user-view.html' queryset = User.objects.all() def get_object(self): username = self.kwargs.get("username") return get_object_or_404(User, username=username)
URL's:
path('<str:username>', UserProfileView.as_view(), name='user_detail') path('<slug:slug>', views.post_detail, name='post_detail')
Сейчас у меня открывается профиль пользователя по адресу site/юзернейм, но не открывается статья по адресу site/названиестатьи. Ошибка:
Page not found (404) Request URL: http://127.0.0.1:8000/testarcticle Raised by: users.views.UserProfileView No User matches the given query.
Подозреваю какой-то конфлитк в урл (slug). Как мне сделать так, чтобы откывалось и статьи и кабинет по адресу site/ без дополнительных каталогов. Буду благодарен за любую помощь.
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.Do you like it? Share on social networks!
l
- laei
- April 23, 2024, 9:19 a.m.
C ++ - Test 004. Pointers, Arrays and Loops
- Result:10points,
- Rating points-10
Last comments
Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Qt WinAPI - Lesson 007. Working with ICMP Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Анатолий КононенкоFeb. 5, 2024, 1:50 a.m.
EVADec. 25, 2023, 10:30 a.m.
Boost - static linking in CMake project under Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
Qt/C++ - Lesson 056. Connecting the Boost library in Qt for MinGW and MSVC compilers Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
Now discuss on the forum
DA
Unlock Your Aesthetic Potential: Explore MSC in Facial Aesthetics and Cosmetology in India Embark on a transformative journey with an msc in facial aesthetics and cosmetology in india . Delve into the intricate world of beauty and rejuvenation, guided by expert faculty and …
Dr Gangil AcademicsApril 20, 2024, 7:45 a.m.
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
Павел ДорофеевApril 14, 2024, 2:35 a.m.
Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…
решение сходу не подскажу (завтра опишу мое решение когдато сделанное) НО при создании урл-ов в джанго Вы должны иметь в виду следуещее (возьмите как правило):
когда браузер запрашивает какую то страницу, джанго идет в файл урлс.пу и начинаест искать соответствие и как тока находит первое соответствие он останавливается и запускает то представление в первом найденном урле, дальше ему похер
в вашем случае браузер просит у бэка страницу, урл которой, выглядет: <домен>/<что тот>
', UserProfileView.as_view(), name='user_detail') идет первым, джанго находит его и отдает представление UserProfileView браузеру
у вас два path-а которые, соответствуют данному шаблону, НО, этот: path('
теперь вы как кодер знаете что у вас есть 2 разных урла - типа разных, джанго пофиг что они разные
если вы в виде экперимета поменяете местами эти 2 path-а, то при запросе типа <домен>/<что тот>, будет выполнятся path('
', views.post_detail, name='post_detail') и не важно что вы запросите профиль или статейку он все равно попытается обратится к представлению post_detail а представление UserProfileView будет игнорированно!
Спасибо, я понял намёк, что надо выразить проверку в одном представлении, и проверять по одному урлу, но не знаю как выразить это в синтаксисе
Кажется, разобрался:
Url:
я бы сделал site/a/article_name и site/u/username - куда проще и лишних запросов не делать
плюс логика относительно каждого запроса изолированна
предаставим, что по бизнес-логике url должно быть именно site/article и site/username, как бы вы поступили?)
ну я бы постарался убедить бизнес, что так делать - не очень и с точки зрения всякого seo и с точки зрения консистентности данных. Что это накладывает ненужные ограничения и на article и на username (слабо связанные сущности начинают оч плотно зависеть друг от друга и накладывать ограничения - чистая архитектура вышла из чата)
плюс начинаются проблемы, если на этих страницах есть формы (допустим, на странице профиля форма его изменения, а на странице статьи - форма комментария) - представление становится слишком большим и выполнять слишком много (SOLID и KISS - вышли вслед за архитектурой)
ну и самая засада начнется, если придется делать разные вложенные страницы - вот тогда будет прям больно: site/ profile /edit + site/ atricle /edit
в этом плане, мне кажется, было бы куда проще сделать так:
НО, из академического интереса, я бы сделал так:
разделил обработку каждой страницы через helper функцию
я бы сделал так потому, что:
1) поле slug создается с индексом и искать через filter по нему - очень быстро и не накладно
2) post_page_view и profile_page_view - устроены точно как представления, так что в случае чего их можно будет легко изолировать с минимумом изменений
3) передавал бы найденные объекты внутрь "представлений", чтобы не делать доп запросов
Спасибо за развернутый ответ, изменил по вашему примеру:
views.py
URL:
На страницу юзера заходит без проблем, но на страницу статьи, почему-то 404. В чем может быть дело?
потому что в post_page_view и profile_page_view вы передаете уже объект
надо:
Спасибо!
как и обещал, я опишу некогда решоную мной задачу, немного похоже на Вашу с урлами.
надо было создать меню, у урлы для меню должны были выглядеть <домен>/<слаг>
я создал прилажуху pages, в этой прилажухи была одна модель:
как видно, некоторые страницы были доступны только авторизованным пользователям.
пыть к любой странице данной модели вот такой:
path('
', get_page, name="page"),
дальше в краце:
1. создал middleware.py и добавил в файл сеттингс:
будет время я обьясню код