Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在与类别相关的文章上设置正确的绝对url_Python_Django_Django Models - Fatal编程技术网

Python 如何在与类别相关的文章上设置正确的绝对url

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)

我用它来制作一个自定义类别模型

我有一个与类别相关的文章模型,但是如何在文章模型上设置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)
    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是类别还是文章,很容易实现你的目标