我有一个类似的功能,它可以很好地用于的“详细产品”。但是,我想在显示多个产品的主页上添加此功能。不确定如何正确地做到这一点。
urls.py
url(r'^like$', views.like_product, name='like_product')
base.html中的脚本
<script type="text/javascript">
$(document).ready(function(event){
$(document).on('click', '#like', function(event){
event.preventDefault();
var pk = $(this).attr('value');
$.ajax({
type: 'POST',
url: '{% url 'like_product' %}',
data: {'id': pk, 'csrfmiddlewaretoken': '{{ csrf_token }}'},
dataType: 'json',
success: function(response){
$('#like-section').html(response['form'])
console.log($('#like-section').html(response['form']));
},
error: function(rs, e){
console.log(rs.responseText);
},
});
});
});
</script>
likes.html
<form action="{% url 'like_product' %}" method="post">
{% csrf_token %}
{% if is_liked %}
<button type="submit" id="like" name="product_id" value="{{ product.id }}" class="btn btn-danger">Dislike</button>
{% else %}
<button type="submit" id="like" name="product_id" value="{{ product.id }}" class="btn btn-primary">Like</button>
{% endif %}
</form>
views.py
def home(request):
products = Product.objects.all().order_by('-pub_date')
f = ProductFilter(request.GET, queryset=products)
context = {
'filter': f,
}
return render(request, 'product/home.html', context).
def detail(request, product_id):
product = get_object_or_404(Product, product_id=product_id)
is_liked = False
if product.likes.filter(id=request.user.id).exists():
is_liked = True
context = {
'product': product,
'is_liked': is_liked,
'total_likes': product.total_likes()
}
return render(request, 'product/detail.html', context)
def like_product(request):
product = get_object_or_404(Product, id=request.POST.get('id'))
is_liked = False
if product.likes.filter(id=request.user.id).exists():
product.likes.remove(request.user)
is_liked = False
else:
product.likes.add(request.user)
is_liked = True
context = {
'product': product,
'is_liked': is_liked,
'total_likes': product.total_likes()
}
if request.is_ajax():
html = render_to_string('product/likes.html', context, request=request)
return JsonResponse({'form': html})
如果从主页单击,则喜欢/不喜欢的记录是正确的,但它们没有正确显示(喜欢和不喜欢的实际数量只能在“详细产品”页面上看到)。我怀疑这是因为我在likes.html中为这两个按钮设置了id="like"
。我怀疑jQuery
脚本也需要更改。不知道该怎么做。提前感谢您的帮助。
发布于 2019-06-03 01:10:47
我假设您正在从URL获取ID到详细信息页面。这真的取决于你如何在页面上生成产品列表,但如果你在模板中使用循环,那么只需在每个产品下添加like按钮,然后使用它的id来设置like表单。
https://stackoverflow.com/questions/56416991
复制相似问题