2012-08-22 121 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