2 回答

TA貢獻1831條經驗 獲得超4個贊
您永遠不應該根據 GET 請求刪除任何內容。所以不要做一個簡單的<a>標簽按鈕來導致你的筆記被刪除。您需要將刪除操作放在通過 POST 請求提交的表單中。
將您的模板更改為:
<form method="post" action="{% url 'delete_note' note.pk %}">
{% csrf_token %}
<input type="submit" class="btn btn-danger" name="delete">DELETE</input>
</form>
此外,您應該給每個模式一個不同的 id,現在當您單擊垃圾桶圖標時,目標是“#myModal”,但這始終是第一個,因為 id 必須是唯一的。將 forloop 計數器或 pk 添加到 id。
您的觀點是:
def delete_note(request, pk):
if request.method == 'POST' and request.POST.get('delete'):
note = get_object_or_404(Notes, pk=pk)
note.delete()
return redirect('notes')
else:
return HttpResponseNotAllowed(['DELETE'])
另請注意,更好地遵循 REST 指南的更好的 url 將是:
path('notes/<int:pk>/delete', delete_note, name="delete_note")
因為“/notes/”是筆記列表,“/notes/id”是特定筆記,“/notes/id/delete”是對特定筆記的刪除操作(在真正的 REST API 中,您不需要/delete 但只會DELETE向“/notes/id”發送 HTTP 請求,但這不能在僅支持的瀏覽器中完成POST)。
添加回答
舉報