Я продолжаю получать : Не найден ответ для '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')
Вернуться на верх