#python #django
#python #django
Вопрос:
Я изучаю django и сталкиваюсь с некоторыми проблемами. Я уже искал этот вопрос, но моя ситуация не похожа на другие.
В моем представлении удаления у меня есть:
def student_delete_view(request, my_id):
#try:
# obj = student.objects.get(id=my_id)
#except student.DoesNotExist:
# raise Http404
obj = get_object_or_404(student, id=my_id)
if request.method == 'POST':
obj.delete()
print("delete trigered")
return redirect('home.html')
context = {
'object':obj
}
return render(request, "student/student_delete.html", context)
И здесь my_id устанавливается в urls.py как:
path('student/<int:my_id>/delete', student_delete_view, name='rmc')
У меня есть это в моем статическом HTML:
{% extends 'base.html' %}
{% block content %}
<form action='.' method='POST'>{% csrf_token %}
<h1>Do you want to delete {{object.id}}?</h1>
<p>{{object.student_name}}</p>
<input type='submit' value='yes'><a href='.'>Cancel</a>
</form>
{% endblock %}
Таким образом, если я введу /student/1/delete , он получит соответствующий объект и спросит меня, хочу ли я его удалить. Я смог успешно перейти на страницу удаления, и она может правильно отображать object.student_name, что означает, что он получает этот объект из SQL.
Затем, если я нажму на delete, он вообще не удаляет этот объект, а также не выполняет функцию перенаправления.
Кроме того, в консоли он не выводит «delete triggered», что означает, что он вообще не запускает удаление.
Единственное, что в консоли:
Not Found: /student/1/
Я понятия не имею, почему он пытается перейти сюда.
Мне просто интересно, почему он не запускает удаление, а перенаправление не работает. Спасибо!
Комментарии:
1. Вы уверены, что доступ к этому URL осуществляется через POST-вызов, а не через GET-вызов?
2. @JohnGordon Вы имеете в виду, что метод в HTML — это «post»? Да, это так.
3. @JohnGordon Я только что изменил метод как в HTML, так и в views.py чтобы ДОБРАТЬСЯ. Теперь, похоже, можно успешно удалить запись, но она не отображает страницу удаления
4. Не меняйте его на GET . Если вы это сделаете, страница будет перенаправляться, как только вы ее загрузите.
Ответ №1:
В:
path('student/<int:my_id>/delete', student_delete_view, name='rmc')
Добавьте / после удаления, чтобы сделать это:
path('student/<int:my_id>/delete/', student_delete_view, name='rmc')
Также измените параметр в redirct на (‘home’), а не на HTML