点赞按钮不记录数据

问题描述 投票:0回答:2

我在我的 view_post 页面上实现了一个点赞按钮,但是点赞按钮还没有被注册。单击按钮后,页面将被正确重定向,但不会添加任何喜欢。

浏览量

def get_post(request, slug):
    try:
        post = BlogPost.objects.get(slug=slug)
    except BlogPost.DoesNotExist: 
        messages.error(request, 'This post does not exist.')
        post = None

    comment_form = CommentForm()

    return render(request, 'mhpapp/view-post.html', {'post': post, 'comment_form': comment_form,})

def like_post(request, slug):
    template_name = 'view-post.html'
    post = get_object_or_404(BlogPost, slug=slug)

    liked = False

    if post.likes.filter(id=request.user.id).exists():
        post.likes.remove(request.user)
        liked = False
    else:
        post.likes.add(request.user)
        messages.success(request, ("Thanks for the like...:-)"))
        liked = True

    return redirect('get_post', {'slug': slug,})

网址

path('<slug:slug>/', views.get_post, name='viewpost'),
path('<slug:slug>/',views.like_post, name='likepost'),

html

 <strong>{{ post.total_likes }} Likes</strong>
    {% if user.is_authenticated %}
    <form action="{% url 'likepost' post.slug %}" method="POST">
        {% csrf_token %}
        {% if request.user in post.likes.all %} 
            <button class="btn btn-outline-secondary rounded-0 custom-button" id="like" type="sumbit" name="post-id" value="{{ post.slug }}"><i class="fa-solid fa-heart-crack"></i></button>
        {% else %}
            <button class="btn btn-outline-secondary rounded-0 custom-button" id="like" type="sumbit" name="post-id" value="{{ post.slug }}"><i class="fa-solid fa-heart"></i></button>
        {% endif %}
    </form>
    {% else %}
    {% endif %}
python django django-views django-forms django-urls
2个回答
1
投票

您不能为两个视图设置相同的路径 url。 django 将循环进入所有 url 并首先获取与 url 路径匹配的。

所以在你的情况下,你的反向 url likepost 总是调用

get_post
我认为视图。

这样测试:

path('view/<slug:slug>/', views.get_post, name='viewpost'),
path('like/<slug:slug>/',views.like_post, name='likepost'),

0
投票

问题出在你的网址上,两者是一样的,尝试做类似的事情:

path('view/<slug:slug>/', views.get_post, name='viewpost'),
path('like/<slug:slug>/', views.like_post, name='likepost'),

以前,它总是指向第一个 url。

编辑:

正确使用

redirect()
所以:

return redirect('viewpost', slug=slug)
© www.soinside.com 2019 - 2024. All rights reserved.