Django-ratings与Jquery集成?

1 投票
3 回答
764 浏览
提问于 2025-04-16 10:29

我该如何让django-ratings和Jquery一起工作呢?

我想做的是让用户可以选择给产品多少颗星星,并且让这个评分的处理能够异步进行。我知道这可能就是基本的AJAX技术,如果这个问题很简单,我很抱歉。

提前谢谢大家。

3 个回答

0

你说得对,这其实是一个基本的Ajax,但你可能需要一个复杂的算法来计算星星的数量。

2

我不太确定我是否理解你的问题,不过你的问题是关于JavaScript的,还是关于模型的呢?从JavaScript的角度,我用了一些这样的代码:

STARS_ELEMENT.stars({
    callback: function(ui, type, value){
        $.post('URL_ADDRESS', {rate: value},
            function(data){
                STARS_ELEMENT.stars("select",data);
            });                         
    }

然后在我的视图中,我会有一个函数来处理这个请求,做这样的事情:

p = Product.objects.get(id=product_id)
p.rating.add(score=int(request.POST['rate']), user=request.user, ip_address=request.META['REMOTE_ADDR'])
p.save()

然后用这个请求给我返回最新的汇率值。你是想问这个吗?

1

通常,把代码改成AJAX的方式很简单,只需要把:

return HttpResponse(....)

替换成:

if request.is_ajax():
    return json_response
else:
    return HttpResponse(....)

甚至可以直接用AJAX:

if request.is_ajax():
    return json_response
else:
    return HttpResponseForbidden('Only AJAX please!')

不过,从我看到的情况来看,这里有一些比较复杂的模式来生成实际的响应。所以,你可以尝试在jQuery的AJAX响应处理程序中处理这个响应,解析它;或者你可以为AddRatingView的call写一个装饰器,这样可以在Python端解析响应,并返回适合jQuery使用的JSON格式。

我假设你不想对现有的django-rating代码做太多修改,比如为了保留将来升级的可能性。

撰写回答