DJANGO Generic Views:如何在get_absolute_url方法中使用reverse()?

时间:2016-06-11 00:51:22

标签: django forms django-generic-views

我正在尝试实现如here所示的通用编辑视图:

我从CreateView开始,它正确地呈现和提交数据。但是,当我尝试使用reverse()返回到新对象的详细视图页面时,我收到错误。

这是我的错误讯息:

  

/ work / clients / create /的NoReverseMatch   使用参数'('14',)'和关键字参数'{}'找不到'ClientDetailView'的反转。尝试了0种模式:[]

以下是我在模型中定义get_absolute_url()的方法:

def get_absolute_url(self):
    return reverse('ClientDetailView', kwargs={'pk': self.pk})

我的视图称为ClientDetailView。我不确定其他哪些信息会有所帮助。

这是类ClientDetailView:

class ClientDetailView(generic.DetailView):    
    model = Client
    template_name = 'work/client_detail.html'`

,这是来自urls.py的url()

url(r'^clients/(?P<pk>[0-9]+)/$', views.ClientDetailView.as_view(), name='clients_detail'),`

任何人都可以解释我做错了吗?

2 个答案:

答案 0 :(得分:0)

我解决了自己的问题。我不得不将命名空间添加到reverse()方法中:

return reverse('work:clients_detail', kwargs={'pk': self.pk})

如果有人能解释我为什么需要这样做,我将不胜感激。

这是我的完整urls.py:     来自django.conf.urls import url

from . import views

app_name = 'work'
urlpatterns = [
    url(r'^work_orders/$', views.WorkOrdersIndexView.as_view(), name='quotes_index'),
    url(r'^work_orders/(?P<pk>[0-9]+)/$', views.WorkOrdersDetailView.as_view(), name='work_orders_detail'),
    url(r'^quotes/$', views.QuotesIndexView.as_view(), name='quotes_index'),
    url(r'^quotes/(?P<pk>[0-9]+)/$', views.QuotesDetailView.as_view(), name='quotes_detail'),
    url(r'^project/(?P<pk>[0-9]+)/$', views.ProjectDetailView.as_view(), name='project_detail'),
    url(r'^project/create/$', views.ProjectCreateView.as_view(), name='project_create'),
    url(r'^project/(?P<pk>[0-9]+)/update/$', views.ProjectUpdateView.as_view(), name='project_update'),
    url(r'^project/(?P<pk>[0-9]+)/delete/$', views.ProjectDeleteView.as_view(), name='project_delete'),
    url(r'^clients/$', views.ClientView.as_view(), name='client_index'),
    url(r'^clients/(?P<pk>[0-9]+)/$', views.ClientDetailView.as_view(), name='clients_detail'),
    url(r'^clients/create/$', views.ClientCreateView.as_view(), name='client_create'),
    url(r'^clients/(?P<pk>[0-9]+)/update/$', views.ClientUpdateView.as_view(), name='clients_update'),
    url(r'^clients/(?P<pk>[0-9]+)/delete/$', views.ClientDeleteView.as_view(), name='clients_delete'),


]

答案 1 :(得分:0)

实际上你试图反转视图,而不是AsyncTask 使用网址名称ClientDetailView