我在我的 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 %}
您不能为两个视图设置相同的路径 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'),
问题出在你的网址上,两者是一样的,尝试做类似的事情:
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)