LOADING

Follow me

Django slugField
十二月 5, 2013|IT

Django slugField



Author: xcluo
Date: 2013-01-17 09:28
Keywords: django,
slug, generate a URL, 

Title: What is a “Slug” in Django?

slug 翻译过来就是, 标称, 单位的意思, 在django中,
主要是生成一个URL路径, 在你已有的有效数据下。


通俗来将:Django中的Slug会为每条model记录,自动(当然可以手动)的根据当前记录的每个字段的Value生成一个URL路径(唯一的),使得你的URL更加的易读(或者也能规避一些额外的问题)。

举例说明:

class Article():
    title = models.CharField(max_length=100)
    content = models.TextField(max_length=1000)
    slug = models.SlugField(max_length=40)


上面是一个Django的Model,
包含三个字段, 最后一个是Slug 字段, 一般的, 我们想显示一篇 Article, 常用的方式可能是:


www.example.com/article/3/
www.example.com/a_id/3/  ……

Problem is: Maybe disclose your database ident
或者,会弱化你的URL可读性, 你可能会希望你的URL能使用title字段或content字段的部分内容来构建起来:

www.example.com/article/America attack on Iraq

这个也有问题, 就是URL 不能识别出空格, 真实的路径会变成:

www.example.com/article/America%20attack%20on%20Iraq

在你其他地方,会变的无法识别, 你就需要将这个空白符进行转义,比如这样:
www.example.com/article/America-attack-on-Iraq

OK, 这个过程就是 “Slug”。

怎么用呢?

在模型中, 简单, 只需要在模型中加上一个字段就可以了。 如何在views中或tempalte中,如何使用呢?

首先考虑到自动方式, 需要更改模型:

class Article():
    title = models.CharField(max_length=100)
    content = models.TextField(max_length=1000)
    slug = models.SlugField(max_length=40)
    
    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super(Article, self).save(*args, **kwargs)


飞自动的方式, 例如:

>>> from django.template.defaultfilters import slugify
>>> tt = slugify("b b b b")
u'b-b-b-b'
>>> models.Articel(title='', contents='', slug=tt).save()



模版中, 就可以当一个数据记录直接调用, 并附件到你的跳转/link路径上

no comments
Share

发表评论