繁体   English   中英

Django ajax“喜欢”按钮使用Jquery?

[英]Django ajax 'like' button using Jquery?

我想实现一个 ajax 'like' 按钮,它应该增加喜欢计数而不是刷新整个页面。 我是 ajax 的新手,所以请帮忙。

网址.py:

(r'^like/(\d+)/$',like),

以下是我的意见代码:

def like(request,feedno):
  feed=Feed.objects.get(pk=feedno)
  t=request.META['REMOTE_ADDR']
  feed.add_vote(t,+1)
  vote, created = Vote.objects.get_or_create(

          feed=feed,
          ip=t,
          )

  feed.likecount+=1
  feed.save()
  if 'HTTP_REFERER' in request.META:
    return HttpResponseRedirect(request.META['HTTP_REFERER'])
  return HttpResponseRedirect('/')

下面是我的html(如div):

<div class="like_abuse_box">
  <p>Likes:<b>{{vote.feed_set.count}}</b> ||
   <a class="like" href="/like/{{feed.id}}/">Like</a> | 
   <a class="abuse" href="/abuse/{{feed.id}}/">Abuse</a> || </p>
</div>

我应该包含哪些代码才能仅刷新该特定 div 并显示更新的类似计数,而不会重新加载整个页面。 需要帮忙。 谢谢。

还没有测试过,虽然这样的东西应该可以工作。 编辑:经过测试和工作,现在适用于网页上的多个元素

Javascript

$("a.like").click(function(){
    var curr_elem = $(this) ;
    $.get($(this).attr('href'), function(data){
        var my_div = $(curr_elem).parent().find("b");
        my_div.text(my_div.text()*1+1);     
    }); 
    return false; // prevent loading URL from href
});

Django 视图

如果请求是 Ajax,您可以添加:

if request.is_ajax():

第一件事:在要注入内容的 html 元素上放置一个 id。

<div class="like_abuse_box">
  <p>Likes:<b id="like_count">{{vote.feed_set.count}}</b> ||
   <a class="like" href="/like/{{feed.id}}/">Like</a> | 
   <a class="abuse" href="/abuse/{{feed.id}}/">Abuse</a> || </p>
</div>

其次,在您看来,您需要返回最新的点赞数。 您不能只在本地更新计数,因为其他人也有可能更新了类似计数。

最后。 在您的页面中包含 jquery

$("a.like").bind("click", function(){
    var link = $(this).attr("href");
    $.get(link, function(data) {
        $(this).parent("div").children('b#like_count').html(data);
    });
});

我不太确定父子选择器,从超链接点击导航到其相应的喜欢计数。 您可能需要使用 JQuery 选择器才能正确设置。

另外,如果您使用 POST 作为视图,请将 $.get 替换为 $.post

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM