簡體   English   中英

為什么我在 django 3.2 中沒有收到反向匹配錯誤?

[英]Why am I getting no reverse match error in django 3.2?

我正在制作一個簡單的待辦事項列表應用程序,但在添加刪除按鈕時,我收到了錯誤消息。 我在 inte.net 上嘗試了很多搜索但無法解決問題,可能是因為我是 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'),
]

意見.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)

模型.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 %}

追溯:

    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(…) function [Django-doc] 你應該在這里使用path(…)

urlpatterns=[
    path('',views.home,name='home'),
    # ↓ path, not url
    path('delete/<str:id>/', views.delete_data,name='deldata'),
]

通常路徑也以斜杠結尾,雖然這不是必需的,但很常見。


注意:從開始, url(…) [Django-doc]已棄用,取而代之的是re_path(…) [Django-doc] 此外,路徑轉換器還引入了一種新的路徑語法:為此你可以使用path(…) [Django-doc]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM