<p>您需要实现一个API(应用程序编程接口)来异步发送upvote和downvote<a href="https://www.django-rest-framework.org/" rel="nofollow noreferrer">Django REST framework</a>是创建自己的API的方法。你可以在YouTube上观看数小时关于这个主题的视频教程。Django REST框架的文档非常棒,而且易于阅读。Django是一个服务器端web框架,这意味着只有当您提交到服务器时,它才能帮助您。您完全可以重新加载同一页面:</p>
<pre><code>return HttpResponseRedirect(reverse('<app_name>:<url_name>'))
</code></pre>
<p>但是,会有一个中断。因此,处理此类行为的推荐方法是使用JavaScript的API(如<a href="https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API" rel="nofollow noreferrer">Fetch API</a>)对REST框架进行异步调用</p>
<p>如果出于对学习异步编码的错误恐惧,您决定以旧的方式向服务器发送数据,则始终可以使用向上投票和向下投票来提交用户数据并更新计数。然后,在视图中,需要获取更新的视图计数并将其传递给上下文。因此,您的upvote视图会更改upvote计数并触发Viewsupplier视图。然后,在ViewSupplier视图中,获取计数并将其添加到上下文中</p>
<pre><code># in your template
<a href="{% url 'upvote' supplier.id %}" class="m-r-10">
<button class="item" data-toggle="tooltip" data-placement="top" title="Like">
<i class="zmdi zmdi-thumb-up"></i>{{upvote_count}}</button>
</a>
# in your view
def Viewsupplier(request):
title = "All Suppliers"
suppliers = User.objects.filter(user_type__is_supplier=True)
# Get the updated count:
suppliers_votes_count = {}
for supplier in suppliers:
upvote_count = supplier.upvotes
downvote_count = supplier.upvotes
supplier_count = {supplier: {'upvote': upvote_count, 'downvote': downvote_count } }
suppliers_votes_count.update(supplier_count)
context = {"suppliers":suppliers, "title":title, "suppliers_votes_count": suppliers_votes_count }
return render(request, 'core/view-suppliers.html', context)
@login_required
def upvote(request, pk):
supplier_vote = get_object_or_404(User, id=pk)
supplier_vote.upvotes += 1
supplier_vote.save()
upvote_count = supplier_vote.upvotes
context = {"supplier_vote":supplier_vote, "upvote_count":upvote_count}
return HttpResponseRedirect(reverse('core:view_supplier'))
</code></pre>