What is a “slug” in django? 什么是django的 slug

时间:2022-03-03 07:37:41

转载链接:http://blog.csdn.net/lx_9986/article/details/8511937
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路径上

Best Regards