Не могу получить ID статьи/поста
Вопрос такой, пытаюсь сделать "Добавить статью в избранное" без ajax. В чем проблема, не могу получить ID статьи . Вот что имеем:
models.py
- class Post(models.Model): #модель статьи
- title = models.CharField(max_length=200, unique=True, verbose_name=u'Заголовок поста', db_index=True )
- slug = models.SlugField(max_length=200, unique=True)
- favourite = models.ManyToManyField(User, related_name='favourtie', blank=True)
- def __str__(self):
- return self.title
views.py
- def post_detail (request, slug): #вьюха вывода статьи
- template_name = 'post_detail.html'
- post = get_object_or_404(Post, slug=slug)
- is_favourite = False # переменная для добавления статьи в избранное
- if post.favourite.filter (id=request.user.id).exists():
- is_favourite = True
- return render(request, template_name, {'post': post, 'is_favourite': is_favourite,})
- #Функция добавления статьи в избранное
- def favourite_post(request, id):
- post = get_object_or_404(Post, id=id)
- if post.favourite.filter(id=request.user.id).exists():
- post.favourite.remove(request.user)
- else:
- post.favourite.add(request.user)
- return HttpResponseRedirect(post.get_absolute_url())
urls.py
- urlpatterns = [
- path('<slug:slug>/', views.post_detail, name='post_detail') #вывод статьи,
- path ('favourite_post', views.favourite_post, name="favourite_post") #Добавление в избранное,
- ]
В шаблоне вывожу ссылку на статью:
- <h2><a href="{% url 'post_detail' post.slug %}">{{ post.title }}</a></h2>
Как только пыатюсь добавить кнопку в шаблон-статью "Добавить в избранное":
- {% if is_favourite %}
- <a href="{% url 'favourite_post' id=post.id %}">
- <i class="fas fa-heart"></i>
- </a>
- {% else %}
- <a href="{% url 'favourite_post' id=post.id %}">
- <i class="far fa-heart"></i>
- </a>
- {% endif %}
Получаю ошибку при переходе по урл статьи:
NoReverseMatch at /novayastatya/
Reverse for 'favourite_post' with keyword arguments '{'id': 57}' not found. 1 pattern(s) tried: ['favourite_post$']
Нид хелп
3
100
The question is asked by the articleDjango - Tutorial 022. Adding a bookmark system (favorites) to the siteDo you like it? Share on social networks!
- Last comments
- AKApril 1, 2025, 11:41 a.m.Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- VPMarch 9, 2025, 4:14 p.m.Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМNov. 22, 2024, 9:51 p.m.Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Now discuss on the forum
- МАApril 1, 2025, 4:21 p.m.0ff763fe-4e50-455d-a3a6-5699c243b1a5_17_44_22_1.xml
- fFeb. 15, 2025, 1:46 p.m.Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
У вас нет идентификатора ID в URL - следовательно он не знает, куда подставлять id в шаблоне
ну и лично я считаю, что правильнее было бы хранить в юзере связь с постами - как-то логичнее
можно было бы сделать так:
Читается так:
Пользователь добавляет пост в избранное, а не Пост в избранное добавляет пользователя
Спасибо за отклик,
попробовал изменить url, получил ошибку:
Если изменить слово path , на url в начале:
То ошибка вроде пропадает, но при клике на статью:
Может быть надо как-то изменить ссылку на статью?
Статьи вывожу так:
Урл получается localhost/novayastatya
вообще так должен записываться url для path
сначала тип, а потом его имя
точно. а я писал по памяти с телефона:(