我正在使用 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吗?我试了几个选项,但都不起作用。我也找不到类似的问题。我甚至不能正确地识别问题。你能帮我吗?
2条答案
按热度按时间inkz8wg91#
在我看来,您当前的路径是“/box”。由于您在 AJAX 调用中使用了绝对URL,并且没有将“/”放在URL的开头,因此URL将被附加到现有的urlpattern,即“/box”,从而导致“/box/delete-comment/ /<some_id>”而不是“delete-comment/<some_id>”。
要解决此问题,请尝试
vh0rcniy2#
我猜你的网址模式看起来像这样:
如果是这种情况,“/box/delete-comment/{id}”不存在。而是“/delete-comment/{id}”存在。这可以通过在该模式的路由前面添加“box/”来解决。