提问人:DR4NKR1D3R 提问时间:3/23/2023 更新时间:3/23/2023 访问量:68
Django AJAX 找不到网址
Django AJAX can't find url
问:
我正在使用 AJAX 请求从产品页面中删除评论,但 django 找不到 url(我收到此日志)。框 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?我尝试了一些选项,但没有一个有效。我也找不到任何类似的问题。我什至无法正确识别问题。你可以帮我吗?
答:
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",
}
})
});
评论