创建Django slug方法

时间:2016-02-08 00:26:21

标签: python django django-models django-templates django-views

我刚刚开始使用Django一段时间了,我一直试图使用slug。我知道它们是什么,但是我很难定义一个简单的slug并将它显示在我的浏览器上。

以下是场景:我有一个models.py,其中包含一个包含3个字段的课本:名称,价格和Autor。我想为name和autor重新调整一个slug字符串,只用连字符( - )和小写字母。

我的问题是如何实现这一目标。仅使用模型,视图和html。这就是我现在所拥有的。但不知道如何在浏览器上显示它(localhost:8000/book_name

class Book(models.Model):
    name = models.CharField(max_length=100)
    price = models.IntegerField(default=0)
    autor = models.CharField(max_length=100)

    slug = models.SlugField(unique=True)

    @models.permalink
    def get_absolute_url(self):
        return 'app:book', (self.slug,)

2 个答案:

答案 0 :(得分:2)

from django.template.defaultfilters import slugify

将以下内容添加到您的模型中:

def save(self,*args,**kwargs):

  self.slug = slugify(self.name)
  return super(Book,self).save(*args,**kwargs)

然后你可以在你的网址中使用slu ::

url(r'mybooks/(?P<slug>[-\w]+)/$', views.BookDetailView.as_view(),name='book_details'),

查看:

from django.views import generic

class BookDetailView(generic.DetailView):

   template_name = "templates/book_detail.html"

答案 1 :(得分:0)

您可以将它添加到models.py文件中:

def save(self , *args , **kwargs):
    if not self.slug:
        self.slug=slugify(self.name)
        super(Book, self).save(*args, **kwargs)

它对我有用。