`
jason9657
  • 浏览: 6118 次
社区版块
存档分类
最新评论

转载django slugfield 中文解决方式

 
阅读更多
原文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中文文档

    django4最新中文文档+适合python初学或者初次接触django4的开发者 从事Python编程工作的人员,一定听说过这三个框架:Django、Flask、Tornado,它们就像神一样的存在 Django是最有代表性的一种。许多成功的网站和APP...

    Django 4.0.3 中文官方文档 网页版

    2022年2月18日,Django 版本已经到了4.0.3 ,这是最新的中文官方文档,网页版的,可以直接本地查看的。网上貌似最新的是 Django 2.1版本的官方文档,做成电子书,Django每个版本差异较大,最好看最新的,相信有关...

    django4.0官方中文文档

    为热爱学习的小伙伴提供django4.0官方文档,

    Django REST framework 中文文档.pdf

    Django REST framework 中文文档,Django REST framework 中文翻译文档,Django REST framework 中文翻译

    DJANGO 2.0 中文文档

    Django 文档 你所需要知道的关于 Django 的一切。 这份文档是如何组织的¶ Django 有丰富的文档。一份高度概述的文档会告诉你在哪里找到特定的东西: 教程 通过手把手地方式教你一步步的创建一个 Web 应用。如果...

    Django_中文教程

    Django_中文教程.pdf Django_中文教程.pdf Django_中文教程.pdf

    django-3.2中文文档.zip

    你所需要知道的关于 Django 的一切。

    Django静态资源部署404问题解决方案

    解决方法: 1.首先你需要在自己的app下面创建2个目录 ... 您可能感兴趣的文章:django 解决自定义序列化返回处理数据为null的问题django queryset 去重 .distinct()说明django的403/404/500错误自定义页面的配置方式

    django4.1中文手册

    Django 文档¶ 你所需要知道的关于 Django 的一切。 快速入门¶ 你是刚学 Django 或是初学编程? 这就是你开始学习的地方! 从零开始: 概要 | 安装 入门教程: 第 1 节:请求和响应 | 第 2 节:模型和管理站点 | ...

    Django 中文文档

    Django 中文文档 Django 中文文档 Django 中文文档 Django 中文文档

    最强django中文手册

    最强最齐全的Django开发文档,对于很多想从事学习Django Web开发的很多人而言,Django一直没有官方的中文文档是个弊端。而且Django更新较快,国内很多翻译版本都太滞后了。现在小编我告诉大家一个好消息!!  Django...

    django中文官方文档

    django中文文档的介绍,django 官方文档说明 django 官方文档说明 django 官方文档说明

    Django 2.2 官方文档中文版.pdf

    Django 2.2 官方文档中文版

    django1.8.2中文文档

    django官方文档中文版,html格式,方便大家学习django框架

    django book 中文最新chm版本

    djangobook 中文chm版本

    Django中文手册

    Django中文手册Django中文手册Django中文手册Django中文手册Django中文手册

    Django_中文教程等

    Django_中文教程,包含python教程,不错的文档Django_中文教程等。Python精品书籍

    django电子商务网站源码.zip

    django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django电子商务网站源码 django...

    django 连接数据库出现1045错误的解决方式

    根据菜鸟教程Django教程学习,运行”python manage.py migrate” 报错,出现 django.db.utils.OperationalError: (1045, “Access denied for user ‘账号’@’localhost’ (using password: YES)”) 错误。 这种...

    Django实现商城网站源码.zip

    Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django实现商城网站源码 Django...

Global site tag (gtag.js) - Google Analytics