【问题标题】:Django creating a custom like button for each itemDjango为每个项目创建一个自定义按钮
【发布时间】:2016-04-29 12:20:09
【问题描述】:

我正在尝试创建自己的点赞按钮,但遇到了一些问题。

代码在 Django 中使用 Ajax,我收到一条错误消息,但我不知道出了什么问题。

这里是代码,大部分灵感来自this post

article\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'),

article\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')

(如您所见,我正在尝试获取文章 ID,而不是 slug)

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>

错误表明没有文章与给定的查询匹配。

为了完成这项工作,我应该改变什么?

【问题讨论】:

  • raised an error 没有向我们提供任何信息来帮助您。图片也不是很有用。您需要编辑您的问题以告诉我们您有什么错误。
  • 您在和id 上使用点击事件,但您有多个按钮,因此id 不起作用。你需要使用classw3schools.com/jquery/jquery_selectors.asp
  • @ShangWang 对问题进行了一些更改,它说没有文章与给定的查询匹配。
  • 这意味着您传入的pk 与数据库中的任何记录都不匹配。你可以在你的views.py中做print id看看id你得到了什么。
  • @ShangWang NameError : name 'id' 未定义。那么如何获取文章ID呢?

标签: python ajax django


【解决方案1】:

从您的代码中,我可以看到“id="like" 用于 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>

【讨论】:

    猜你喜欢
    • 2021-10-10
    • 2012-11-26
    • 2013-03-05
    • 2016-04-27
    • 1970-01-01
    • 2011-08-30
    • 2014-03-26
    • 2011-07-15
    • 1970-01-01
    相关资源
    最近更新 更多