Django DetailView有很少的url参数

时间:2015-12-07 14:38:13

标签: 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.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>这样的网址?我怎么能这样做?

1 个答案:

答案 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