【问题标题】:Likes feature in DjangoDjango 中的点赞功能
【发布时间】:2014-08-03 08:19:31
【问题描述】:

我正在尝试为我的网络应用实现 Like 功能。代码如下:

型号:

class Like(models.Model):
    user = models.ManyToManyField(User, related_name='likes')
    doctor = models.ForeignKey(Doctor)
    date = models.DateTimeField(auto_now_add=True)
    total_likes = models.IntegerField(default=0)

查看:

def like(request):
    vars = {}
    if request.method == 'POST':
        user = request.user
        slug = request.POST.get('slug', None)
        doctor = get_object_or_404(Doctor, slug=slug)

        liked, created = Like.objects.create(Doctor=doctor)

        try:
            user_liked = Like.objects.get(Doctor=doctor, user=user)
        except:
            user_liked = None

        if user_liked:
            user_liked.total_likes -= 1
            liked.user.remove(request.user)
            user_liked.save()
        else:
            liked.user.add(request.user)
            liked.total_likes += 1
            liked.save()


    return HttpResponse(simplejson.dumps(vars),
                mimetype='application/javascript')

网址:

url(r'^like/(?P<id>\d+)/$', views.like, name='like'),

模板:

<input type="button" id="like" name="{{doctor_slug}}" value="Like" />

<script>
$('#like').click(function(){
      $.ajax({
               type: "POST",
               url: "{% url like %}",
               data: {'slug': $(this).attr('name'), 'csrfmiddlewaretoken': '{{csrf_token}}'},
               dataType: "text",
               success: function(response) {
                      alert('You liked this')
                },
                error: function(rs, e) {
                       alert(rs.responseText);
                }
          }); 
    })
</script>

当我打开我的模板页面时,我收到错误NoReverseMatch at /docprofile/1/ 'url' requires a non-empty first argument. The syntax changed in Django 1.5, see the docs. 我查看了文档但找不到任何可以在这里使用的东西。问题似乎出在"url: "{% url like %}"," 的模板中。这是在 Ajax 内部。

【问题讨论】:

  • 你需要告诉django你想要哪个id,url反向翻译才能正常工作。

标签: python ajax django url django-templates


【解决方案1】:

正如错误所说,您应该看到docs。您需要将视图函数的路径或url的名称作为字符串传递给url模板标签。

<script>
$('#like').click(function(){
      $.ajax({
               type: "POST",
               url: "{% url 'like' %}",
               data: {'slug': $(this).attr('name'), 'csrfmiddlewaretoken': '{{csrf_token}}'},
               dataType: "text",
               success: function(response) {
                      alert('You liked this')
                },
                error: function(rs, e) {
                       alert(rs.responseText);
                }
          }); 
    })
</script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-21
    • 2017-08-31
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    相关资源
    最近更新 更多