Django在单击Like按钮后重定向

Django在单击Like按钮后重定向,django,redirect,django-views,Django,Redirect,Django Views,在我的项目中,我正在做一个类似/不同的系统。单击“相似”按钮后,应在同一页面上重定向,但更新为+1“相似”,但不是。我在youtube上看过这个系统的视频,他们成功了,但我不知道我的代码有什么问题 views.py def like_view(request, pk): cocktail = get_object_or_404(AddCocktails, id=request.POST.get('cocktail_id')) liked = False if cockta

在我的项目中,我正在做一个类似/不同的系统。单击“相似”按钮后,应在同一页面上重定向,但更新为+1“相似”,但不是。我在youtube上看过这个系统的视频,他们成功了,但我不知道我的代码有什么问题

views.py

def like_view(request, pk):
    cocktail = get_object_or_404(AddCocktails, id=request.POST.get('cocktail_id'))
    liked = False
    if cocktail.likes.filter(id=request.user.id).exists():
        cocktail.likes.remove(request.user)
        liked = False
    else:
        cocktail.likesadd(request.user)
        liked = True

    return HttpResponseRedirect(reverse('cocktails:cocktail-details', args=[str(pk)]))


class CocktailDetails(LoginRequiredMixin, DetailView):
    model = AddCocktails
    template_name = 'cocktails/cocktail-details.html'

    def get_context_data(self, *args, **kwargs):
        cocktail_data = AddCocktails.objects.filter(id=self.kwargs['pk'])
        context = super().get_context_data(**kwargs)

        stuff = get_object_or_404(AddCocktails, id=self.kwargs['pk'])
        total_likes = stuff.total_likes

        liked = False
        if stuff.likes.filter(id=self.request.user.id).exists():
            liked = True

        context['cocktail_data'] = cocktail_data
        context['total_likes'] = total_likes
        context['liked'] = liked
        return context
url.py

path('cocktail-details/<int:pk>/', CocktailDetails.as_view(), name='cocktail-details'),
path('likes/<int:pk>/', like_view, name='likes'),
path('cocktail-details/',CocktailDetails.as_view(),name='cocktail-details'),
路径('likes/',like_view,name='likes'),
模板

{% for cocktail in cocktail_data %}
<h4>Cocktail Name</h4>
{{ cocktail.cocktail_name }}
<h4>Cocktail Category</h4>
{{ cocktail.cocktails_category }}
<h4>Type of Glass</h4>
{{ cocktail.crockery_category }}
<h4>Method Category</h4>
{{ cocktail.method_category }}
<h4>Ingredients</h4>
{{ cocktail.ingredients }}
<h4>Execution</h4>
{{ cocktail.execution }}
<img src="{{ cocktail.image.url }}" width="350" height="350">
<form action="{% url 'cocktails:likes' cocktail.pk %}" method=POST>
    {% csrf_token %}
    {% if liked %}
        <button type="submit" name="cocktail.id" value="{{ cocktail.id }}" class="btn unlike">Unlike
        </button>
    {% else %}
        <button type="submit" name="cocktail.id" value="{{ cocktail.id }}" class="btn like">Like
        </button>
    {% endif %}
    - {{ total_likes }} Likes
</form> 
{% endfor %}
{%用于鸡尾酒中的鸡尾酒\u数据%}
鸡尾酒名
{{鸡尾酒,鸡尾酒{名字}
鸡尾酒类
{{鸡尾酒.鸡尾酒{u类}
玻璃类型
{{鸡尾酒.陶器类}
方法类别
{{cockbox.method_category}
成分
{{鸡尾酒.配料}
执行
{{cockbox.execution}}
{%csrf_令牌%}
{%if%}
不像
{%else%}
喜欢
{%endif%}
-{{total_likes}}likes
{%endfor%}
因此,单击按钮后,url将显示“http://127.0.0.1:8000/likes/3“找不到页面 我应该为like_视图创建模板吗


中为循环
放置类似系统是个好主意吗?因为当我把它放在外面的时候,错误是说,
Reverse for'likes'和arguments'('')'没有找到。尝试了1个模式:[喜欢/(?P[0-9]+)$']

在模板中的

表单中使用
name=“cockbox.id”

在您的视图中,您的do
get\u object\u或\u 404(…id=request.POST.get('cocktail\u id')
鸡尾酒id不存在于您的查询中,这就是为什么您会得到
HttpResponseNotFound

您必须使用您的
按钮名称
鸡尾酒。id

cocktail = get_object_or_404(AddCocktails, id=request.POST.get('cocktail.id'))
或者更简单地使用
pk
参数:

cocktail = get_object_or_404(AddCocktails, id=pk)

哦,天哪,我好傻……非常感谢你!@Hudy\u edd