Django DetailView,url参数很少

Django DetailView,url参数很少,django,Django,假设我有下一个型号: class Category(models.Model): cat_name = models.CharField(u'name',max_length=50, unique=True) slug = models.SlugField(u'URL',unique=True) class News(models.Model): title = models.CharField(max_length=250) slug = models.Slu

假设我有下一个型号:

class Category(models.Model):
    cat_name = models.CharField(u'name',max_length=50, unique=True)
    slug = models.SlugField(u'URL',unique=True)

class News(models.Model):
    title = models.CharField(max_length=250)
    slug = models.SlugField(unique=True)
    category = models.ForeignKey(Category,null=True,on_delete=models.SET_NULL)
我的get_absolute_url函数如下所示:

def get_absolute_url(self):
    return ('news:detail',(), {'slug':self.slug})
url看起来像
/article/
如果我想要像
这样的URL?我怎样才能做到这一点?

您可以做到:

# models.py
def get_absolute_url(self):
    return ('news:detail', (), {
        'category_slug': self.category.slug,
        'slug': self.slug,
    })

# views.py
class NewsDetail(DetailView):
    model = News
    slug_field = 'slug'
    slug_url_kwarg = 'slug'

    def get_queryset(self):
        return News.objects.filter(category__slug=self.kwargs['category_slug'])

# urls.py
url(r'(?P<category_slug>[a-z0-9\-]+)/(?P<slug>[a-z0-9\-]+)/$', NewsDetail.as_view(), name='news')
#models.py
def get_绝对_url(自身):
return('news:detail',(){
“category_slug”:self.category.slug,
“slug”:self.slug,
})
#views.py
类NewsDetail(DetailView):
模型=新闻
slug_字段='slug'
slug_url_kwarg='slug'
def get_queryset(自我):
return News.objects.filter(category\u slug=self.kwargs['category\u slug'])
#url.py
url(r'(?P[a-z0-9\-]+)/(?P[a-z0-9\-]+)/$”,NewsDetail.as_view(),name='news')
因此,我们的想法是在url定义中添加两个参数。最后一个通常用于查询新闻行,
get\u queryset
将使用第一个来按指定类别过滤新闻


更多关于文档中url中参数的信息-

您当前的url定义是什么?非常棒的方法,但我得到了下一个错误:
“news”不是注册的命名空间
您需要使用命名空间注册url。我以为你已经这么做了。如果没有,您可以将
get\u absolute\u url
更改为只使用
news
url名称而不使用名称空间。但是现在,这个:
与参数“()”和关键字参数“{slug':'sample news slug'}”的“detail”相反。尝试了1个模式:['(?P[-\uw\\d]+)/(?P[-\uw\\d]+)/$']
您还需要在其中包括
类别\u段塞
。看看我的答案。我提供了我不懂的
get\u absolute\u url
的示例实现<代码>类别_slug包含在示例中<代码>返回('news:detail',(),{'category_slug':self.category.slug,'slug':self.slug})