Почему я получаю ошибку отсутствия обратного соответствия в django 3.2?
Я делаю простое приложение для создания списка дел, но при добавлении кнопки удаления я получаю ошибку. Я много чего перепробовал, искал в интернете, но не смог решить проблему, возможно потому что я новичок в django.Так что ваша помощь будет очень важна.
urls.py (из приложения):
from django.conf.urls import url
from django.urls import path
from . import views
urlpatterns=[
path('',views.home,name='home'),
url('delete/<str:id>', views.delete_data,name='deldata'),
]
views.py:
from django.shortcuts import get_object_or_404, render,redirect
from todo.models import value
from django.http import HttpResponseRedirect
# Create your views here.
from .forms import TitleForm
from django.urls import reverse
def home(request):
values=value.objects.all()
form=TitleForm
if request.method=='POST':
form=TitleForm(request.POST)
if form.is_valid():
form.save()
return redirect('/')
else:
form=TitleForm()
return render(request,'home.html',{'values':values,'form':form})
#delete
def delete_data(request, id ):
ggwp=value.objects.get(id=id)
if request.method=="POST":
ggwp=value.objects.get(id=id)
ggwp.delete()
return HttpResponseRedirect(reverse('deldata', kwargs={'id':id}))
context={'ggwp':ggwp}
return render(request,'/',context)
models.py:
from django.db import models
# Create your models here.
class value(models.Model):
task=models.CharField(max_length=200)
complete=models.BooleanField(default=False)
created=models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.task
home.html (единственная страница html):
<h3>TO DO LIST</h3>
<form method="POST" action="\">
{% csrf_token %}
{{form.task}} <input type='submit' name='add' value="add" >
</form>
{% for val in values %}
{{val}}
<form action="{% url 'deldata' val.id %}" method="POST" class="in-line">
{% csrf_token %}
<input type="submit" value="Delete" >
</form>
{% endfor %}
traceback:
raise NoReverseMatch(msg)
django.urls.exceptions.NoReverseMatch: Reverse for 'deldata' with arguments '(15,)' not
found. 1 pattern(s) tried: ['delete/<str:id>']
[05/Oct/2021 22:37:17] "GET / HTTP/1.1" 500 127858
Это мой первый вопрос, так что извините, если я допустил какие-либо ошибки при написании вопроса.
Вы используете *path(…)
[Django-doc] синтаксис с url(…)
функцией [Django-doc]. Вы должны работать с path(…)
здесь:
urlpatterns=[
path('',views.home,name='home'),
# ↓ path, not url
path('delete/<str:id>/', views.delete_data,name='deldata'),
]
Обычно пути также заканчиваются косой чертой, хотя это не обязательно, но часто встречается.
Примечание: Начиная с версии django-3.1,
url(…)
[Django-doc] является deprecated в пользуre_path(…)
[Django-doc]. Кроме того, был введен новый синтаксис для путей с конвертерами путей: вы используетеpath(…)
[Django-doc] для этого.