Skip to main content
 首页 » 编程设计

python之使用ajax在基于django类的 View 中找不到url

2024年12月31日35kuangbin

我对“赞”功能有疑问。我想让这篇文章成为可能,而不会使整个页面重载。所以我使用了连接到 ajax 的 CBV django。

我的问题是它收到:Not Found:/like/ 通过按“Like”按钮。

我的看法:

class PostLikeView(generic.View): 
    def post(self, request): 
 
        post = get_object_or_404(Post, id=request.POST.get('id')) 
        is_liked = False 
        if post.likes.filter(id=request.user.id).exists(): 
            post.likes.remove(request.user) 
            is_liked = False 
        else: 
            post.likes.add(request.user) 
            is_liked = True 
        context = { 
            'post': post, 
            'is_liked': is_liked, 
            'total_likes': post.total_likes(), 
            } 
        if request.is_ajax(): 
            html = render_to_string('post/like_section.html', context, request=request) 
            return JsonResponse({'form': html}) 

下面是jquery代码:

        <script type="text/javascript"> 
            $(document).ready(function(event){ 
                $(document).on('click', '#like', function(event){ 
                    event.preventDefault; 
                    var pk = $(this).attr('value'); 
                    $.ajax({ 
                        type: 'POST', 
                        url: "{% url 'post:post_like' %}", 
                        data: {'id': pk, 'csrfmiddlewaretoken': '{{ csrf_token }}'}, 
                        dataType: 'json', 
                        success: function(response){ 
                            $('#like-section').html(response['form']) 
                            console.log($('#like-section').html(response['form'])) 
                        }, 
                        error: function(rs, e){ 
                            console.log(rs.responseText); 
                        }, 
                    }); 
                }); 
            }); 
        </script> 

查看网址:

url(r'^like/$', login_required(PostLikeView.as_view()), name='post_like'), 

html 代码:

<form action="{% url 'post:post_like' %}" method="post"> 
    {% csrf_token %} 
    {% if is_liked %} 
        <button type="submit" id="like" name="post_id" value="{{ post.id }}" class="btn btn-danger">Dislike</button> 
    {% else %} 
        <button type="submit" id="like" name="post_id" value="{{ post.id }}" class="btn btn-primary">Like</button> 
    {% endif %} 
</form> 

我希望按钮的工作原理是不重新加载整个页面。

请您参考如下方法:

我认为问题是您实际上没有调用 event.preventDefault在您的点击事件处理程序中(您缺少括号)。这意味着提交按钮提交表单,但表单不包含名为 id 的参数。所以get_object_or_404(Post, id=request.POST.get('id'))引发 404。

将缺少的括号添加到 event.preventDefault ,还要注意 id= 的值HTML 元素的属性应为 unique within the page .更改 id= 的值<button> 上的属性元素,以便它们是唯一的。