Python 如何在与类别相关的文章上设置正确的绝对url
我用它来制作一个自定义类别模型 我有一个与类别相关的文章模型,但是如何在文章模型上设置get_absolute_url,比如/category path/article slug /类别路径/可以是这样的路径:/top-level-category/sub-level-category/sub-sub-level-category/ 这是我的模特Python 如何在与类别相关的文章上设置正确的绝对url,python,django,django-models,Python,Django,Django Models,我用它来制作一个自定义类别模型 我有一个与类别相关的文章模型,但是如何在文章模型上设置get_absolute_url,比如/category path/article slug /类别路径/可以是这样的路径:/top-level-category/sub-level-category/sub-sub-level-category/ 这是我的模特 class Category(CategoryBase): order = models.IntegerField(default=0)
class Category(CategoryBase):
order = models.IntegerField(default=0)
description = models.TextField(blank=True, null=True)
class MPTTMeta:
order_insertion_by = ('order', 'name')
def get_absolute_url(self):
"""Return a path"""
prefix = reverse('categories_tree_list')
ancestors = list(self.get_ancestors()) + [self, ]
return prefix + '/'.join([force_unicode(i.slug) for i in ancestors]) + '/'
class Article(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(max_length=255)
category = models.ForeignKey(Category)
我的URL.py
from django.conf.urls import patterns, url
from apps.news.views import CategoryList
urlpatterns = patterns('',
#Startpage for app
url(r'^$', CategoryList.as_view(), name="categories_tree_list")
)
urlpatterns += patterns('apps.news.views',
url(r'^(?P<path>.+)/$', 'category_detail', name='categories_category'),
)
我不知道类别是否有属性slug,如果没有,您可以自己添加它
models.py
class Category(CategoryBase):
order = models.IntegerField(default=0)
description = models.TextField(blank=True, null=True)
class MPTTMeta:
order_insertion_by = ('order', 'name')
def get_absolute_url(self):
"""Return a path"""
prefix = reverse('categories_tree_list')
ancestors = list(self.get_ancestors()) + [self, ]
return prefix + '/'.join([force_unicode(i.slug) for i in ancestors]) + '/'
class Article(models.Model):
title = models.CharField(max_length=255)
slug = models.SlugField(max_length=255)
category = models.ForeignKey(Category)
class Article(models.Model):
...
category = models.ForeignKey(Category)
def get_absolute_url(self):
arguments = (self.category.slug, self.slug)
return reverse('article-detail',arguments)
views.py
def article_detail(request,category_slug,article_slug):
article = Article.objects.get(category__slug=category_slug,
slug=article_slug)
return render(request, 'article_detail_template.html',
{'article':article})
url.py
urlpatterns += patterns('',
url(r'^(?P<category_slug>.+)/(?P<article_slug>.+)$',
'app.views.article_detail', name='article-detail'),
)
在模板中,使用以下链接到特殊文章
是的,如果这篇文章属于顶级类别,那就太好了。当文章处于子级别类别(如/top category slug/sub category slug/article slug/I有一个建议,你的文章的slug不以/)结尾时,这种方法不起作用,那么很容易判断url是类别还是文章,很容易实现你的目标