2012-08-22 94 views
1

的JavaScript

$('button.like').click(function(){ 
    $.get($(this).parent().attr('href'),function(data){ 
     $(this).html(''+data); 
    }); 
    return false; 
}); 

视图

def like(request): 
    if request.is_ajax: 
     r = Restaurant.objects.get(pk=1) 
     r.food_likes +=1 
     r.save() 
     return HttpResponse(str(r.food_likes)) 
    else: 
     return redirect(request.META.get('HTTP_REFERER')) 

HTML

<a href="/like/"> 
     <button class="like pull-right btn btn-info text-left pad0 btn-mini mrg-left5 like-food"> 
      <i class="icon-thumbs-up"></i>&nbsp;`{{rest.food_likes}}` 
     </button> 
    </a> 

疑问

如何更改使用会话这样的JavaScript即使用户r eloads页面,那么他也应该能够切换喜欢和不喜欢,例如,如果用户喜欢某个特定餐厅的特定会话,那么如果他刷新,那么他也应该被提示不喜欢它,如果他想撤消他动作,请大家帮忙防止用户提交好恶多次

+0

对于JS,您可以使用cookie。对于Python,您可以创建会话或记录用户的IP地址。 – Blender

+0

你知道'get()'函数中的$(this)'没有引用你想要的元素吗? – undefined

+0

是的,我会保存所需的元素到一个变量,然后我会用它在得到,但多数民众赞成在这一点上,但你可以请你建议我一些相关的例子,在此先感谢 – Abhimanyu

回答

2

您可以轻松地在用户的会话数据存储在Django,

# Returns value of is_user_like key from user's session if it's available, or False 
request.session.get('is_user_like', False) 
# Sets value of is_user_like in user's session to True 
request.session['is_user_like'] = True 

更改您的模板:

<a href="/like/"> 
    <button class="like pull-right btn btn-info text-left pad0 btn-mini mrg-left5 like-food"> 
     <i class="{% if user_likes %}icon-thumbs-down{% else %}icon-thumbs-up{% endif %}"></i>&nbsp;`{{rest.food_likes}}` 
    </button> 
</a> 

而且通过user_likes = request.session.get('is_user_like', False)到模板渲染器。在这个文件

def like(request): 
    if request.is_ajax: 
     r = Restaurant.objects.get(pk=1) 
     r.food_likes +=1 
     r.save() 
     request.session['is_user_like'] = True 
     return HttpResponse(str(r.food_likes)) 
    else: 
     return redirect(request.META.get('HTTP_REFERER')) 

检查并确保你已经在Django启用SessionMiddleware - 它是: - 还会话行添加店你喜欢视图的代码(如果您有任何和它的负面厌恶视图)在生成的设置文件中默认启用:https://docs.djangoproject.com/en/dev/topics/http/sessions/

+0

是啊,我明白了你的观点,但如果我在同一页上有多个相似的模型,那么我该如何设置会话密钥? – Abhimanyu

+0

我想你可以在会话中存储一个数组或字典,例如你的第n个餐厅的代码将是'request.session ['user_likes'] [n] = True' – MostafaR