【问题标题】:Ajax powered like button in DjangoDjango 中的 Ajax 类似按钮
【发布时间】:2017-12-24 20:43:02
【问题描述】:

我已经为点赞按钮构建了下一个架构,但它不起作用。这是我的文件:

models.py

class Comentario (models.Model):
    titulo = models.CharField(max_length=50)
    autor = models.ForeignKey (Perfil, null=True, blank=True, on_delete=models.CASCADE)
    archivo = models.FileField(upload_to='media/%Y/%m/%d', null=True, blank=True)
    slug= models.SlugField(default=0)
    likes = models.ManyToManyField(Perfil, related_name="likes")

    def __str__(self):
        return (self.titulo)

    @property

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

    def save(self, *args, **kwargs):
        self.slug=slugify(self.titulo)
        super(Comentario, self).save(*args, **kwargs)

views.py

try:
    from django.utils import simplejson as json
except ImportError:
    import json

def like (request):
    if request.method=='POST':
    perfil=request.user
    slug=request.POST.get('slug', None)
    comentario=get_object_or_404(Comentario, slug=slug)

        if comentario.objects.filter(perfil__id=perfil.id).exists():
            comentario.likes.remove(perfil_id)
        else:

            comentario.likes.add(perfil_id)

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

urls.py

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

.html

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

                <script>
                $('#like').click(function(){
                     $.ajax("/home/like/",{
                            type: "POST",
                            url: "{% url 'home:like' %}",
                            data: {'slug': $(this).attr('titulo'), 'csrfmiddlewaretoken': '{{ csrf_token }}'},
                            dataType: "json",
                            success: function(response) {

                            alert(' likes count is now ' + response.likes_count);
                        },
                            error: function(rs, e) {
                            alert(rs.responseText);
                            }
                        }); 
                    })
                </script>

当我按下按钮时,它什么也没做。控制台告诉我:

POST htt jquery.min.js:4 p:/127.0.0.1.8000/home/like/404(未找到)

和:http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js

问题出在哪里?

感谢您的帮助

【问题讨论】:

    标签: javascript jquery python ajax django


    【解决方案1】:

    问题在于您的视图未通过 slug 字段找到Comentario。你的 ajax { 'slug' : $(this).attr('titulo') ... 正确吗?您确定 'titulo' 是 slug 的正确字段还是必须是 $(this).attr('slug')?试试这个:

    $.ajax("/home/like/",{
                            type: "POST",
                            url: "{% url 'home:like' %}",
                            data: {'slug': $(this).attr('name'), 'csrfmiddlewaretoken': '{{ csrf_token }}'},
                            dataType: "json",
                            success: function(response) {
    
                            alert(' likes count is now ' + response.likes_count);
                        },
                            error: function(rs, e) {
                            alert(rs.responseText);
                            }
                        }); 
    

    【讨论】:

    • 我做了这个改变,我把 slug 作为 attr 但它不起作用,错误是一样的。在models.py中,我在slugfield中保存了titulo,所以attr是'slug',不是吗?我看不到真正的错误。但是是的,我的观点没有找到评论,也不知道为什么。
    • 如果你使用名称而不是 slug 怎么办?更新答案
    • 它不适用于名称,错误是一样的。 404 not found home/like/,问题出在我认为的视图中。
    猜你喜欢
    • 1970-01-01
    • 2017-10-08
    • 2019-04-02
    • 2017-08-24
    • 1970-01-01
    • 2014-09-20
    • 2012-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多