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

转载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...

    django4.1中文手册

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

    django4.0官方中文文档

    《Django 4.0 官方中文文档详解》 Django 4.0 是一个强大的、免费且开源的Web框架,由Python编程语言编写,主要用于构建高效、可扩展的Web应用。它遵循“DRY”(Don't Repeat Yourself)原则,强调代码重用和快速...

    django-3.2中文文档.zip

    这个“django-3.2中文文档.zip”压缩包包含了丰富的资料,帮助开发者全面了解和掌握 Django 3.2 版本的相关知识。 1. **入门介绍(intro)** - Django 入门教程通常会讲解如何安装 Django,创建第一个项目和应用,...

    django中文官方文档

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

    Django 4.0.3 中文官方文档 网页版

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

    Django中文版 教程.

    标题中提到的是“Django中文版 教程”,而描述中则表明这是一份适合新手并且详尽的教程,附带目录,说明教程结构完整,覆盖了新手入门所需学习的各个方面。标签“python Django”指出这份教程专注于Python语言和...

    Django 2.2 官方文档中文版.pdf

    Django是一个高级的Python Web框架,它鼓励快速开发和干净、实用的设计。它负责处理很多麻烦的事情,例如用户认证、内容管理、站点地图等,从而让开发者可以专注于编写应用的代码。Django 2.2作为该框架的一个版本,...

    Django2.0中文文档

    除了上述基础知识点外,Django中文文档还涵盖了更多的高级内容,例如高级视图和URL配置、模板的高级进阶技巧、模型的高级进阶用法、通用视图的使用、Django项目的部署、输出非HTML内容、处理会话、用户认证和注册、...

    DJANGO 2.0 中文文档

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

    Django 中文文档

    以下是根据给定文件内容整理出的Django中文文档的知识点: 1. Django文档概览:文档涵盖从基础入门、安装教程到模型、视图、模板、表单、测试、静态文件管理等各个方面的详细说明。还包括如何编写可重用的应用、...

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

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

    Django REST framework 中文文档.pdf

    整体上,Django REST framework中文文档是为希望学习或了解如何使用DRF构建RESTful API的开发者提供的宝贵资源。文档详细介绍了DRF的核心组件和高级特性,通过这些知识点,开发者可以快速搭建起符合RESTful架构风格...

    Django_中文教程等

    1. Django中文教程:Django的中文教程涵盖了从基础到进阶的所有内容,包括但不限于Django的安装、项目创建、URL路由、视图函数、模板系统、数据库模型、表单处理、用户认证与授权、中间件、静态文件与媒体文件处理、...

    Python DjangoBook中文版

    《Python DjangoBook中文版》是针对Django框架的详尽教程,旨在帮助初学者和有经验的开发者快速掌握Django的使用。这本书由hideto翻译并发布在JavaEye社区,为中文阅读者提供了方便的学习资源。 Django是一个用...

    django book 中文最新chm版本

    djangobook 中文chm版本

    Django_中文教程

    3. **抽象与约定**:Django提供了一套高度抽象的通用Web开发模式,并为常见编程任务提供了快速解决方案。同时,它也提供了清晰的约定来指导开发者如何解决问题。 4. **框架的目的**:Django不仅仅是一个工具,它还...

    最强django中文手册

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

    Django By Example中文_目录_精排_2017_文字版

    首先介绍了Django的安装与环境配置,然后逐步讲解了如何创建项目、设计数据库模型、利用Django管理界面进行模型管理、执行数据库迁移、使用QuerySet和Manager进行数据操作、创建视图、模板和URLs,以及如何为视图...

    官方DjangoBook中文版

    《官方DjangoBook中文版》是一份详尽的Django框架学习资料,旨在为初学者和进阶者提供全面的指导。Django是基于Python语言的高性能Web开发框架,以其MVC(Model-View-Controller)设计模式和“ batteries included ...

Global site tag (gtag.js) - Google Analytics