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路径上
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值