首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django Ajax Like工作不正确: jQuery问题

Django Ajax Like工作不正确: jQuery问题
EN

Stack Overflow用户
提问于 2019-06-03 00:45:24
回答 1查看 76关注 0票数 0

我有一个类似的功能,它可以很好地用于的“详细产品”。但是,我想在显示多个产品的主页上添加此功能。不确定如何正确地做到这一点。

urls.py

代码语言:javascript
复制
url(r'^like$', views.like_product, name='like_product')

base.html中的脚本

代码语言:javascript
复制
<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

代码语言:javascript
复制
<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

代码语言:javascript
复制
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脚本也需要更改。不知道该怎么做。提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2019-06-03 01:10:47

我假设您正在从URL获取ID到详细信息页面。这真的取决于你如何在页面上生成产品列表,但如果你在模板中使用循环,那么只需在每个产品下添加like按钮,然后使用它的id来设置like表单。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56416991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档