Django在单击Like按钮后重定向
在我的项目中,我正在做一个类似/不同的系统。单击“相似”按钮后,应在同一页面上重定向,但更新为+1“相似”,但不是。我在youtube上看过这个系统的视频,他们成功了,但我不知道我的代码有什么问题 views.pyDjango在单击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
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”
在您的视图中,您的doget\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