Django AJAX 找不到网址

Django AJAX can't find url

提问人:DR4NKR1D3R 提问时间:3/23/2023 更新时间:3/23/2023 访问量:68

问:

我正在使用 AJAX 请求从产品页面中删除评论,但 django 找不到 url(我收到此日志enter image description here)。框 url: , 删除 url: .我的 AJAX 调用:path('box/<int:id>', views.box, name='box')path('delete-comment/<int:id>', views.delete_comment, name='delete_comment'),

comment.addEventListener("click", () => {
        fetch(`delete-comment/${comment.dataset.comment_id}`, {
            method: "DELETE",
            headers: {
                "X-Requested-With": "XMLHttpRequest",
            }
        })
    });

并查看:

def delete_comment(request, id):
    if request.headers.get("X-Requested-With") == "XMLHttpRequest":
        if request.method == 'DELETE':
            comment = Comment.objects.get(id=id)
            
            if comment.user == request.user:
                comment.delete()

            return HttpResponseBadRequest('ok')
    else:
        return HttpResponseBadRequest('Invalid request')

我认为url有问题。为什么 django 要寻找 /box/delete-comment/id,它不应该寻找 /delete-comment/id 还是 /box/box-id/comment/id?我尝试了一些选项,但没有一个有效。我也找不到任何类似的问题。我什至无法正确识别问题。你可以帮我吗?

Python django ajax

评论


答:

0赞 Jacinator 3/23/2023 #1

我猜你的 urlpatterns 看起来像这样:

urlpatterns = [
    path('box/<int:id>', views.box, name='box'),
    path('delete-comment/<int:id>', views.delete_comment, name='delete_comment'),
]

如果是这种情况,“/box/delete-comment/{id}”则不存在。相反,“/delete-comment/{id}”存在。这可以通过在该模式的路线前面添加“box/”来解决。

1赞 Sanjay Shahi 3/23/2023 #2

在我看来,您目前在路径“/box”上。由于您在 ajax 调用中使用了绝对 url,并且没有将“/”放在 url 的开头,因此 url 将附加到现有的 urlpattern 中,即“/box”,从而产生“/box/delete-comment/<some_id>/”而不是“delete-comment/<some_id>”。

要解决此问题,请尝试

comment.addEventListener("click", () => {
        fetch(`/delete-comment/${comment.dataset.comment_id}`, {
            method: "DELETE",
            headers: {
                "X-Requested-With": "XMLHttpRequest",
            }
        })
    });