原文http://www.weiguda.com/blog/1/
1. 总体介绍
django-uuslug是一个很方便的将中文转化成拼音slug的插件. 通过使用django-uuslug, 可以保确保slug是唯一的, 并且都是unicode编码的.
django中的slug是什么: slug是一个新闻属性, django中的slug是指有效URL的一部分, 能使URL更加清晰易懂. 比如有这样一篇文章, 标题是"那个13岁的孩子", 它的URL地址是"/news/na-ge-13-sui-de-hai-zi", 后面这一部分便是slug.
2. 如何安装
使用VirtualEnv在Bash shell中:
pip install django-uuslug
3. 如何使用
a. 将任意编码转为相应的unicode:
from uuslug import slugify
txt = "This is a test ---"
r = slugify(txt)
self.assertEquals(r, "this-is-a-test")
txt = "This -- is a ## test ---"
r = slugify(txt)
self.assertEquals(r, "this-is-a-test")
txt = 'C\'est déjà l\'été.'
r = slugify(txt)
self.assertEquals(r, "cest-deja-lete")
txt = '你好我是中国人'
r = slugify(txt)
self.assertEquals(r, "nin-hao-wo-shi-zhong-guo-ren")
txt = 'Компьютер'
r = slugify(txt)
self.assertEquals(r, "kompiuter")
txt = 'jaja---lol-méméméoo--a'
r = slugify(txt)
self.assertEquals(r, "jaja-lol-mememeoo-a")
txt = 'jaja---lol-méméméoo--a'
r = slugify(txt, max_length=9)
self.assertEquals(r, "jaja-lol")
txt = 'jaja---lol-méméméoo--a'
r = slugify(txt, max_length=15)
self.assertEquals(r, "jaja-lol-mememe")
txt = 'jaja---lol-méméméoo--a'
r = slugify(txt, max_length=50)
self.assertEquals(r, "jaja-lol-mememeoo-a")
txt = 'jaja---lol-méméméoo--a'
r = slugify(txt, max_length=15, word_boundary=True)
self.assertEquals(r, "jaja-lol-a")
txt = 'jaja---lol-méméméoo--a'
r = slugify(txt, max_length=19, word_boundary=True)
self.assertEquals(r, "jaja-lol-mememeoo")
txt = 'jaja---lol-méméméoo--a'
r = slugify(txt, max_length=20, word_boundary=True)
self.assertEquals(r, "jaja-lol-mememeoo-a")
txt = 'jaja---lol-méméméoo--a'
r = slugify(txt, max_length=20, word_boundary=True, separator=".")
self.assertEquals(r, "jaja.lol.mememeoo.a")
txt = 'jaja---lol-méméméoo--a'
r = slugify(txt, max_length=20, word_boundary=True, separator="ZZZZZZ")
self.assertEquals(r, "jajaZZZZZZlolZZZZZZmememeooZZZZZZa")
b. 唯一性测试, 重写model.py中的save()方法:
from django.db import models
from uuslug import uuslug
class CoolSlug(models.Model):
name = models.CharField(max_length=100)
slug = models.CharField(max_length=200)
def __unicode__(self):
return self.name
def save(self, *args, **kwargs):
# self.slug = uuslug(self.name, instance=self, separator="_") # optional non-dash separator
self.slug = uuslug(self.name, instance=self)
super(CoolSlug, self).save(*args, **kwargs)
c. 指定起始数字:
self.slug = uuslug(self.name, instance=self, start_no=2)
# 第二个slug就会以-2结尾
name = "john"
c = CoolSlug.objects.create(name=name)
c.save()
print c.slug # => "john"
c1 = CoolSlug.objects.create(name=name)
c1.save()
print c1.slug # => "john-1"
c2 = CoolSlug.objects.create(name=name)
c2.save()
print c2.slug # => "john-2"
d. 限制slug的长短:
class SmartTruncatedSlug(models.Model):
name = models.CharField(max_length=19)
slug = models.CharField(max_length=19)
def __unicode__(self):
return self.name
def save(self, *args, **kwargs):
self.slug = uuslug(self.name, instance=self, start_no=9, max_length=19, word_boundary=True)
super(SmartTruncatedSlug, self).save(*args, **kwargs)
# 测试
name = 'jaja---lol-méméméoo--a'
obj = SmartTruncatedSlug.objects.create(name=name)
print obj.slug # "jaja-lol-mememeoo" --- where 19 is max_length (first slug, no duplicate yet)
obj = SmartTruncatedSlug.objects.create(name=name)
print obj.slug # "jaja-lol-mememeoo-9" --- where 19 is max_length, start_no = 9
obj = SmartTruncatedSlug.objects.create(name=name)
print obj.slug # "jaja-lol-mememeo-10" -- where 19 is max_length, smart appending "-10"
4. 其他资源
最后给出该项目的Github地址: django-uuslug, 方便各位自己查看.
原文链接: http://www.weiguda.com/blog/1/
分享到:
相关推荐
django4最新中文文档+适合python初学或者初次接触django4的开发者 从事Python编程工作的人员,一定听说过这三个框架:Django、Flask、Tornado,它们就像神一样的存在 Django是最有代表性的一种。许多成功的网站和APP...
2022年2月18日,Django 版本已经到了4.0.3 ,这是最新的中文官方文档,网页版的,可以直接本地查看的。网上貌似最新的是 Django 2.1版本的官方文档,做成电子书,Django每个版本差异较大,最好看最新的,相信有关...
为热爱学习的小伙伴提供django4.0官方文档,
Django REST framework 中文文档,Django REST framework 中文翻译文档,Django REST framework 中文翻译
Django 文档 你所需要知道的关于 Django 的一切。 这份文档是如何组织的¶ Django 有丰富的文档。一份高度概述的文档会告诉你在哪里找到特定的东西: 教程 通过手把手地方式教你一步步的创建一个 Web 应用。如果...
Django_中文教程.pdf Django_中文教程.pdf Django_中文教程.pdf
你所需要知道的关于 Django 的一切。
解决方法: 1.首先你需要在自己的app下面创建2个目录 ... 您可能感兴趣的文章:django 解决自定义序列化返回处理数据为null的问题django queryset 去重 .distinct()说明django的403/404/500错误自定义页面的配置方式
Django 文档¶ 你所需要知道的关于 Django 的一切。 快速入门¶ 你是刚学 Django 或是初学编程? 这就是你开始学习的地方! 从零开始: 概要 | 安装 入门教程: 第 1 节:请求和响应 | 第 2 节:模型和管理站点 | ...
Django 中文文档 Django 中文文档 Django 中文文档 Django 中文文档
最强最齐全的Django开发文档,对于很多想从事学习Django Web开发的很多人而言,Django一直没有官方的中文文档是个弊端。而且Django更新较快,国内很多翻译版本都太滞后了。现在小编我告诉大家一个好消息!! Django...
django中文文档的介绍,django 官方文档说明 django 官方文档说明 django 官方文档说明
Django 2.2 官方文档中文版
django官方文档中文版,html格式,方便大家学习django框架
djangobook 中文chm版本
Django中文手册Django中文手册Django中文手册Django中文手册Django中文手册
Django_中文教程,包含python教程,不错的文档Django_中文教程等。Python精品书籍
django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django...
根据菜鸟教程Django教程学习,运行”python manage.py migrate” 报错,出现 django.db.utils.OperationalError: (1045, “Access denied for user ‘账号’@’localhost’ (using password: YES)”) 错误。 这种...
Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django...