【问题标题】:How do I slugify one of my CharFields in my Django models?如何在我的 Django 模型中对我的 CharField 之一进行 slugify?
【发布时间】:2014-04-15 09:54:35
【问题描述】:

我一直在尝试在我的模型中对 CharField 进行 slugify。我遵循this 教程,但我只设法得到一个数据库错误。 “列article_article.slug 不存在。我知道South 和migrations 但我没有正确使用它。基本上我有一个博客应用程序,每个帖子都由一个ID 号标识。我想slugify每篇博文的标题。

这是我的意见.py

def article(request, article_id =1):
    return render_to response('article.html', {'article':Article.Objects.get(id=article_id)}, context_instance=ResquestContext(request))

这是我的models.py

class Article(models.Model):
    title = models.CharField(max_length=30) #<--want to slugify this
    body = models.TextField()
    pub_date = models.DateTimeField('date published')
    likes = models.IntegerField(default = 0)

    def __unicode__(self):
         return self.title

这是我的 urls.py

...
url(r'^get/(?P<article_id>\d+)/$', 'article.views.article'),
...

这是我的文章.html

 ...
 <a id = "title2" href="articles/get{{ article.id }} /"> {{ article.title }} </a>
 ...

【问题讨论】:

标签: python django slug


【解决方案1】:

希望对您有所帮助!您需要创建一个 slug 字段。

class Article(models.Model):
        title = models.CharField(max_length=30)
        slug = models.SlugField() #slug field
        body = models.TextField()
        pub_date = models.DateTimeField('date published')
        likes = models.IntegerField(default = 0)

        def __unicode__(self):
             return self.title

        def save(self, *args, **kwargs):
             if self.title == None or self.title == '':
                   self.title = _infer_title_or_slug(self.text.raw)

             if self.slug == None or self.slug == '':
                   self.slug = slugify(self.title)

             i = 1
             while True:
                 created_slug = self.create_slug(self.slug, i)
                 slug_count = Article.objects.filter(slug__exact=created_slug).exclude(pk=self.pk)
                 if not slug_count:
                      break
                 i += 1
             self.slug = created_slug

             #your other code

             #call the "real" save method
             super(Article, self).save(*args, **kwargs)


        def create_slug(self, initial_slug, i=1):
             if not i==1:
                 initial_slug += "-%s" % (i,)
             return initial_slug

【讨论】:

    猜你喜欢
    • 2011-06-09
    • 2013-05-17
    • 2018-11-16
    • 1970-01-01
    • 2013-06-21
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多