progammist
progammistApril 29, 2020, 1:30 p.m.

Не могу получить ID статьи/поста

django

Вопрос такой, пытаюсь сделать "Добавить статью в избранное" без 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$']

Нид хелп

We recommend hosting TIMEWEB
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!

5
Илья Чичак
  • April 29, 2020, 3:19 p.m.
    path('favourite_post', views.favourite_post, name="favourite_post") #Добавление в избранное,


    path('favourite_post/<post_id:int>/', views.favourite_post, name="favourite_post") # Должно быть так

У вас нет идентификатора ID в URL - следовательно он не знает, куда подставлять id в шаблоне

<a href="{% url 'favourite_post' id=post.id %}">
    Илья Чичак
    • April 29, 2020, 3:19 p.m.
    • (edited)

    ну и лично я считаю, что правильнее было бы хранить в юзере связь с постами - как-то логичнее
    можно было бы сделать так:

    if user.favourites.filter(id=id).exists():
        user.favourites.remove(post)
    else:
        user.favourites.add(post)
    

    Читается так:
    Пользователь добавляет пост в избранное, а не Пост в избранное добавляет пользователя

      progammist
      • April 29, 2020, 7:38 p.m.
      • (edited)

      Спасибо за отклик,
      попробовал изменить url, получил ошибку:

          "URL route '%s' uses invalid converter %s." % (original_route, e)
      django.core.exceptions.ImproperlyConfigured: URL route 'favourite_post/<post_id:
      int>/' uses invalid converter 'post_id'.
      
      

      Если изменить слово path , на url в начале:

       url('favourite_post/<post_id:int>/', views.favourite_post, name="favourite_post") 
      

      То ошибка вроде пропадает, но при клике на статью:

      Reverse for 'favourite_post' with keyword arguments '{'id': 57}' not found. 1 pattern(s) tried: ['favourite_post/<post_id:int>/']
      

      Может быть надо как-то изменить ссылку на статью?
      Статьи вывожу так:

      <h2><a href="{% url 'post_detail' post.slug  %}">{{ post.title }}</a></h2>
      

      Урл получается localhost/novayastatya

        Evgenii Legotckoi
        • April 30, 2020, 2:45 a.m.

        вообще так должен записываться url для path

        path('favourite_post/<int:post_id>/', views.favourite_post, name="favourite_post")
        

        сначала тип, а потом его имя

          Илья Чичак
          • April 30, 2020, 3:03 a.m.

          точно. а я писал по памяти с телефона:(

            Comments

            Only authorized users can post comments.
            Please, Log in or Sign up
            AD

            C ++ - Test 004. Pointers, Arrays and Loops

            • Result:50points,
            • Rating points-4
            m

            C ++ - Test 004. Pointers, Arrays and Loops

            • Result:80points,
            • Rating points4
            m

            C ++ - Test 004. Pointers, Arrays and Loops

            • Result:20points,
            • Rating points-10
            Last comments
            ИМ
            Игорь МаксимовNov. 22, 2024, 11:51 a.m.
            Django - Tutorial 017. Customize the login page to Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
            Evgenii Legotckoi
            Evgenii LegotckoiOct. 31, 2024, 2:37 p.m.
            Django - Lesson 064. How to write a Python Markdown extension Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
            A
            ALO1ZEOct. 19, 2024, 8:19 a.m.
            Fb3 file reader on Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
            ИМ
            Игорь МаксимовOct. 5, 2024, 7:51 a.m.
            Django - Lesson 064. How to write a Python Markdown extension Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
            d
            dblas5July 5, 2024, 11:02 a.m.
            QML - Lesson 016. SQLite database and the working with it in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
            Now discuss on the forum
            m
            moogoNov. 22, 2024, 7:17 a.m.
            Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
            Evgenii Legotckoi
            Evgenii LegotckoiJune 24, 2024, 3:11 p.m.
            добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
            t
            tonypeachey1Nov. 15, 2024, 6:04 a.m.
            google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
            NSProject
            NSProjectJune 4, 2022, 3:49 a.m.
            Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

            Follow us in social networks