У меня есть функция «Мне нравится» , которая отлично работает для «Подробного продукта» . Тем не менее, я хочу добавить эту функцию на главной странице, где отображаются несколько продуктов. Не уверен, как правильно это сделать.

urls.py :

url(r'^like$', views.like_product, name='like_product') 

скрипт в base.html :

 {amp}lt;script type="text/javascript"{amp}gt; $(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); }, }); }); }); {amp}lt;/script{amp}gt; , {amp}lt;script type="text/javascript"{amp}gt; $(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); }, }); }); }); {amp}lt;/script{amp}gt; , {amp}lt;script type="text/javascript"{amp}gt; $(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); }, }); }); }); {amp}lt;/script{amp}gt; 

likes.html :

 {amp}lt;form action="{% url 'like_product' %}" method="post"{amp}gt; {% csrf_token %} {% if is_liked %} {amp}lt;button type="submit" id="like" name="product_id" value="{{ product.id }}" class="btn btn-danger"{amp}gt;Dislike{amp}lt;/button{amp}gt; {% else %} {amp}lt;button type="submit" id="like" name="product_id" value="{{ product.id }}" class="btn btn-primary"{amp}gt;Like{amp}lt;/button{amp}gt; {% endif %} {amp}lt;/form{amp}gt; 

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}) 

Нравится / Не нравится записывается правильно при нажатии на главной странице, однако они отображаются неправильно (фактическое количество лайков и кнопка «Не нравится» можно увидеть только на странице «Подробный продукт»). Я подозреваю, что это потому, что у меня есть id="like" в likes.html для обеих кнопок. Я подозреваю, что скрипт jQuery тоже нужно изменить. Не уверен, как это сделать. Заранее спасибо за помощь.

Я предполагаю, что вы получаете идентификатор от URL до страницы сведений. Это действительно зависит от того, как вы генерируете список продуктов на странице, но если вы используете цикл в шаблонах, просто добавьте кнопку «Мне нравится» под каждым продуктом, а затем используйте его идентификатор для настройки формы.