Я продолжаю получать : Не найден ответ для 'delete_entry' с аргументами '('',)'. 1 pattern(s) tried: ['deleteentry/(?P<input_id>[^/]+)/\\\Z'].
Я новичок и пытался найти решения в других темах безрезультатно,
Вот мой views.py :
@login_required(login_url='/login')
def delete_entry(request, input_id):
input=Diary.objects.get(pk=input_id)
input.delete()
return redirect('home')
Вот мой urls.py :
urlpatterns = [
path('', views.welcome, name='welcome'),
path('home', views.home, name='home'),
path('MyEntries/', views.MyEntries, name='entries'),
path('deleteentry/<input_id>/', views.delete_entry, name='delete_entry'),
]
Вот мой html код :
<p>Hello, {{user.username}} !</p>
{% for article in articles %}
<p> {{ article.title}}<br>
{{ article.description }} <br>
{{ article.date }}
<div class="card-footer text-muted">
</p>
<a href="{% url 'delete_entry' input.id %}" class="delete">Delete</a>
</div>
{% endfor %}
{% endblock %}
Как говорит ошибка, это происходит потому, что input.id
разрешается в пустую строку, поэтому, скорее всего, input
не существует, или у него нет id
.
Вероятно, вы должны работать с article.id
, или, возможно, даже более надежно, использовать article.pk
. Если вы удаляете элементы, вам нужно сделать запрос DELETE или POST, поэтому вы можете не работать со ссылкой, вы используете мини-форму, так:
<form action="post" method="{% url 'delete_entry' article.pk %}"> {% csrf_token %} <button type="submit" class="delete">Delete</button> </form>
Представление можно улучшить, используя get_object_or_404
, и ограничить представление только запросами POST и DELETE:
from django.shortcuts import get_object_or_404
from django.views.decorators.http import require_http_methods
@login_required(login_url='/login')
@require_http_methods(["DELETE", "POST"])
def delete_entry(request, input_id):
input = get_object_or_404(Diary, pk=input_id)
input.delete()
return redirect('home')