您的位置:

对于django错误AttributeError("Generic detail view %s must be called with either an object ""pk or a slug in the URLconf." % self.__class__.__name__)的解决

  发布时间:2023-03-24 08:23:48
报错的原因这个错误通常是在使用Django的通用视图时出现的。它表示在URLconf中没有提供主键或滑块。例如,如果你使用了一个DetailView,你可能会写一个这样的这个URLconf会匹配以下在这种情况下,主键是42。为了解决这个问题,请确保在URLconf中提供主键或滑块,并在实际的URL中使用它们。ListView用于显示对象列表,而DetailView用于显示单个对象的详细信息。第一个路径将URL /articles/映射到ArticleListView视图,第二个路径将映射到ArticleDetailView视图。

报错的原因

这个错误通常是在使用Django的通用视图时出现的。它表示在URLconf中没有提供主键或滑块。

例如,如果你使用了一个DetailView,你可能会写一个这样的URLconf:

path('article//', views.ArticleDetailView.as_view(), name='article-detail')

这个URLconf会匹配以下URL:

/article/42/

在这种情况下,主键是42。如果您在URL中省略了主键或滑块,则会出现上述错误。

为了解决这个问题,请确保在URLconf中提供主键或滑块,并在实际的URL中使用它们。

例如,如果你想要查看文章的详细信息,你可以使用以下URL:

/article/42/

如果你想要使用滑块而不是主键,你可以修改URLconf来使用滑块:

path('article//', views.ArticleDetailView.as_view(), name='article-detail')

然后,你可以使用以下URL来查看文章的详细信息:

/article/my-article-slug/

如何解决

要解决这个问题,你需要在URLconf中提供主键或滑块,并在实际的URL中使用它们。

例如,如果你使用了一个DetailView,你可能会写一个这样的URLconf:

path('article//', views.ArticleDetailView.as_view(), name='article-detail')

这个URLconf会匹配以下URL:

/article/42/

在这种情况下,主键是42。如果您在URL中省略了主键或滑块,则会出现上述错误。

为了解决这个问题,请确保在URLconf中提供主键或滑块,并在实际的URL中使用它们。

例如,如果你想要查看文章的详细信息,你可以使用以下URL:

/article/42/

如果你想要使用滑块而不是主键,你可以修改URLconf来使用滑块:

path('article//', views.ArticleDetailView.as_view(), name='article-detail')

然后,你可以使用以下URL来查看文章的详细信息:

/article/my-article-slug/

使用例子

当然,这是一个使用Django通用视图的示例:


from django.shortcuts import render
from django.views.generic import ListView, DetailView
from .models import Article

class ArticleListView(ListView):
    model = Article
    context_object_name = 'articles'
    template_name = 'articles/article_list.html'

class ArticleDetailView(DetailView):
    model = Article
    context_object_name = 'article'
    template_name = 'articles/article_detail.html'

这些视图使用了Django的通用视图ListView和DetailView。ListView用于显示对象列表,而DetailView用于显示单个对象的详细信息。

在这个例子中,我们使用了Article模型。我们使用`model`属性来指定模型,使用`context_object_name`属性来指定在模板中使用的上下文变量的名称,并使用`template_name`属性来指定要使用的模板。

我们还需要编写URLconf来将URL映射到这些视图。这是一个示例的URLconf:


from django.urls import path
from . import views

urlpatterns = [
    path('articles/', views.ArticleListView.as_view(), name='article-list'),
    path('articles//', views.ArticleDetailView.as_view(), name='article-detail'),
]

这个URLconf包含两个路径。第一个路径将URL /articles/映射到ArticleListView视图,第二个路径将URL /articles//映射到ArticleDetailView视图。

在这个例子中,我们使用主键来捕获文章的详细信息。例如,如果我们想查看文章42的详细信息,我们可以使用以下URL:

/articles/42/

我如果你想使用滑块而不是主键,你可以更改URLconf来使用滑块:


from django.urls import path
from . import views

urlpatterns = [
    path('articles/', views.ArticleListView.as_view(), name='article-list'),
    path('articles//', views.ArticleDetailView.as_view(), name='article-detail'),
]

然后,你可以使用以下URL来查看文章的详细信息:

/articles/my-article-slug/

希望这些信息能帮助你解决问题!如果你有任何其他问题或疑问,请随时告诉我。