DeleteView приводит к ошибке 405 при нажатии на кнопку submit на django
У меня есть небольшое приложение для размещения записей в блоге, где все работает хорошо, кроме функции удаления. Как только я нажимаю кнопку delete, я перехожу на страницу удаления поста, но когда я нажимаю confirm на html странице DeleteView, я получаю 405 ошибку
моя views.py
для удаления выглядит следующим образом
class DeletePost(DetailView):
model = Articles
template_name = 'delete_article.html'
success_url = reverse_lazy('list_articles')
мой html файл, где упоминается ссылка, выглядит следующим образом
<!DOCTYPE html>
{% extends 'base.html' %}
{% block body %}
<div class="container">
{% for i in articles %}
<div class="jumbotron">
<h2>{{i.title}}</h2>
<p>- {{i.author}}</p>
{{i.created_on}}
{{i.updated_on}}
<p>{{i.content}}</p>
<a class="btn btn-warning" href="{% url 'update_article' i.id %}">Update</a>
<a class="btn btn-danger" href="{% url 'delete_article' i.id %}">Delete</a>
</div>
{% endfor %}
</div>
{% endblock %}
Урлы выглядят так
from django.urls import path
from mysite import views
urlpatterns = [
path('articles/', views.PostList.as_view(), name='list_articles'),
path('articles/<pk>/', views.PostDetail.as_view(), name='detail_article'),
path('create/new/', views.CreateNewPost.as_view(), name='create_new_article'),
path('update/<pk>/', views.UpdatePost.as_view(), name='update_article'),
path('delete/<pk>/', views.DeletePost.as_view(), name='delete_article'),
]
и html для deleteview
<!DOCTYPE html>
{% extends 'base.html' %}
{% block body %}
<form method="post">
{% csrf_token %}
<p>Are you sure you want to delete "{{ object }}"?</p>
{{ form.as_p }}
<input class='btn btn-danger' type="submit" value="Confirm">
</form>
{% endblock %}
405 означает, что метод не разрешен, измените метод вашей формы на метод POST
DELETE
.
<form method="DELETE">
Вы указали для удаления, что неправильно, вместо этого укажите DetailView
DeleteView
, который находится в from django.views.generic.edit import DeleteView
.
Note:
Представления на основе классов требуют фактическое имя представления в качестве суффикса, поэтому вы должны написать его какPostDeleteView
вместо. Аналогично, напишитеDeletePost
PostListView
,PostDetailView
и т.д. Добавьте имя модели в качестве префикса и имя представления в качестве суффикса и должно быть вPascalCase
.