Django AJAX 找不到URL

dwthyt8l  于 2023-03-24  发布在  Go
关注(0)|答案(2)|浏览(215)

我正在使用 AJAX 请求从产品页面删除评论,但是django找不到url(我得到了这个日志x1c 0d1x). Box url:path('box/<int:id>', views.box, name='box'),删除url:path('delete-comment/<int:id>', views.delete_comment, name='delete_comment'),.我 AJAX 调用:

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吗?我试了几个选项,但都不起作用。我也找不到类似的问题。我甚至不能正确地识别问题。你能帮我吗?

inkz8wg9

inkz8wg91#

在我看来,您当前的路径是“/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",
            }
        })
    });
vh0rcniy

vh0rcniy2#

我猜你的网址模式看起来像这样:

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/”来解决。

相关问题