Django URL Slugs

时间:2016-05-24 23:47:30

标签: django models

我有评论和帖子模型。

我希望网址以@ post // comment //

的形式出现

但我不确定如何设置它。

我的帖子模型有这个:

@python_2_unicode_compatible
class Post(models.Model):
    ...
    slug = models.SlugField(unique=True)

    @models.permalink
    def get_absolute_url(self):
        return 'appname:post', (self.slug,)

我的评论模型可以:

@python_2_unicode_compatible
class Comment(models.Model):
    ...
    slug = models.SlugField(unique=True)

    @models.permalink
    def get_absolute_url(self):
        return 'appname:post:comment', (self.slug,)

或者我如何连接get_absolute_url以便网址以我提到的方式出现?还是有更好的方法?

1 个答案:

答案 0 :(得分:0)

@python_2_unicode_compatible
class Comment(models.Model):
    title = models.CharField(max_length=100)
    body = models.CharField(max_length=1000)
    creation_date = models.DateTimeField(auto_now_add=True)
    last_updated = models.DateTimeField()
    author = models.ForeignKey(Person, related_name='authors')
    project = models.ForeignKey(Project, related_name='comments', null=True, blank=True)
    task = models.ForeignKey(Task, related_name='comments', null=True, blank=True)
    slug = models.SlugField(unique=True)

    def __str__(self):
        return self.title    

    @models.permalink
    def get_absolute_url(self):
        if self.project:
            return ('comment', (), {
                'project': self.task.id,
                'slug': self.slug,
                'id': self.id,
            })            
        elif self.task:
            return ('comment', (), {
                'project': self.task.project.id,
                'task': self.task.id,
                'slug': self.slug,
                'id': self.id,
            })

然后连接urls.py以使用名为'评论'

的网址的所有必要ID