2016-01-22 77 views
0

我試圖創建自己喜歡的按鈕,但遇到一些問題。Django爲每個項目創建一個自定義按鈕

該代碼使用Django與Django和我收到一條錯誤消息,但我不知道什麼是錯的。

這裏是代碼,主要受this post的啓發。

文章\ models.py

class Article(models.Model): 
    user = models.ForeignKey(User, default='1') 
    titre = models.CharField(max_length=100, unique=True) 
    [... some unrelated models ...] 
    slug = models.SlugField(max_length=40) 
    likes = models.ManyToManyField(User, related_name="likes") 

    def __str__(self): 
     return self.titre 

    @property 
    def total_likes(self): 
     return self.likes.count() 

文章\ urls.py

url(r'^like/$', views.like_button, name='like_button'), 

文章\ views.py

@login_required(login_url='/user') 
def like_button(request): 
    if request.method == 'POST': 
     user = request.user 
     id = request.POST.get('pk', None) 
     article = get_object_or_404(Article, pk=id) 

     if article.likes.filter(id=user.id).exists(): 
      article.likes.remove(user) 
     else: 
      article.likes.add(user) 

    context = {'likes_count': article.total_likes} 
    return HttpResponse(json.dumps(context), content_type='application/json') 

(正如你看到的,我想獲得的文章編號,而不是塞)

article.html

<div> 
    {% for a in article %} 
    [... some unrelated html ...] 

    <input type="button" class="like" name="{{ a.id }}" value="Like" /> 
    <p>count : {{ a.total_likes }}</p> 
    {% endfor %} 
</div> 

<script> 
$('.like').click(function(){ 
     $.ajax({ 
       type: "POST", 
       url: "{% url 'like_button' %}", 
       data: {'pk': $(this).attr('name'), 'csrfmiddlewaretoken': '{{ csrf_token }}'}, 
       dataType: "json", 
       success: function(response) { 
         alert('Company likes count is now ' + response.count_likes); 
       }, 
       error: function(rs, e) { 
         alert(rs.responseText); #No Article matches the given query. 
       } 
      }); 
    }) 
</script> 

錯誤說沒有了給定的查詢相匹配。

我爲了做這個工作應該改變什麼?

+0

'提出錯誤'沒有給我們任何信息讓我們來幫助您,圖片也沒有用,您需要編輯您的問題,告訴我們您有什麼錯誤 –

+0

您正在使用點擊事件和'id',但是你有多個按鈕,所以'id'不起作用,你需要使用'class':http://www.w3schools.com/jquery/jquery_selectors.asp –

+0

@Shan gWang對這個問題做了一些修改,它說沒有文章與給定的查詢匹配。 – Lindow

回答

1

從你的代碼,我可以看到「ID =」喜歡」是在for循環使用,因此它使多個按鈕具有相同的ID。ID必須是唯一的

打算進軍的變化ID與類像

<div> 
    {% for a in article %} 
    [... some unrelated html ...] 

    <input type="button" class="like" name="{{ a.id }}" value="Like" /> 
    <p>count : {{ a.total_likes }}</p> 
    {% endfor %} 
</div> 

<script> 
$('.like').click(function(){ 
    var pk = $(this).attr('name'); 
    $.ajax({ 
      type: "POST", 
      url: "{% url 'like_button' %}", 
      data: {'pk': pk, 'csrfmiddlewaretoken': '{{ csrf_token }}'}, 
      dataType: "json", 
      success: function(response) { 
        alert('Company likes count is now ' + response.count_likes); 
      }, 
      error: function(rs, e) { 
        alert('Something went wrong.'); #getting this message. 
      } 
     }); 
    }) 
</script> 
相關問題