假设我有下一个模型:
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})
网址看起来像/article/<slug>
如果我想要<category.slug><news.slug>
这样的网址?我怎么能这样做?
答案 0 :(得分:0)
你可以这样做:
# 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')
因此,我们的想法是为您的网址定义添加2个参数。最后一个通常是查询新闻行,第一个将由get_queryset
用于按指定类别过滤新闻。
有关文档中网址中参数的更多信息 - https://docs.djangoproject.com/en/1.9/topics/http/urls/#named-groups