Реверс для 'cbvdetail' не найден. 'cbvdetail' не является действительным именем функции представления или шаблона
я не могу вызвать свой класс детализации, используя reverse_lazy from django.shortcuts import render, redirect from django.urls import reverse_lazy, reverse
from . models import Task
from . forms import Taskform
from django.views.generic import ListView
from django.views.generic.detail import DetailView
from django.views.generic.edit import UpdateView
class Tasklistview(ListView):
model = Task
template_name = 'home.html'
context_object_name = 'task'
class Detailview(DetailView):
model=Task
template_name = "details.html"
context_object_name = 'task'
class Updateview(UpdateView):
model = Task
template_name = "update.html"
context_object_name = "task"
fields = ('name', 'priority', 'date')
def get_success_url(self):
return reverse_lazy("cbvdetail",kwargs={'pk':self.object.id})
urls.py
from django.urls import path
from . import views
app_name='todoapp'
urlpatterns = [
path('',views.home,name='home'),
# path('details', views.details,name='ere')
path('delete/<int:id>/',views.delete,name='delete'),
path('edit/<int:id>/',views.update,name='update'),
path('cbvhome/',views.Tasklistview.as_view(),name='home'),
path('cbvdetail/<int:pk>/',views.Detailview.as_view(),name='cbvdetail'),
path('cbvupdate/<int:pk>/',views.Updateview.as_view(),name='edit'),
]
я хочу решить этот вопрос
Вы указали app_name
в файле urls.py
. Это означает, что вам нужно префикснуть имя представления с этой меткой приложения, так:
def get_success_url(self):
return reverse_lazy('todoapp:cbvdetail', kwargs={'pk':self.object.id})
Если вы переопределите get_success_url
, не имеет особого смысла работать с reverse_lazy
, поскольку этот метод (обычно) срабатывает только в том случае, если урлы уже загружены, поэтому вы можете работать с:
from django.urls import reverse
# ⋮
def get_success_url(self):
return reverse('todoapp:cbvdetail', kwargs={'pk':self.object.id})