Skip to content

guarantee a unique unicode slug for use in Django projects. (for live demo, visit the following link and create an account)

License

Notifications You must be signed in to change notification settings

jedie/django-uuslug

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

django-uuslug
================


This fork notes
------------------------------------------------------------------------------------------------
Here ' symbol in result of unidecode.unidecode() is deleted instead of replacing with -.
For example for Russian word "Компьютер" unidecode.unidecode() returns "komp'uter", 
then uuslug create "komp-uter" from this, but translitiration "komputer" seems more natural.


A Django slugify application that guarantees uniqueness and handles unicode.
UUSlug = (``U``nique + ``U``nicode Slug)

Patches welcome: https://github.com/un33k/django-uuslug

Usage
=====

A. Install django-uuslug:
    * _ Make sure you have python 2.6+ and can install from pypi
        1. easy_install django-uuslug
        2. pip install django-uuslug
        3. git clone http://github.com/un33k/django-uuslug
            a. cd django-uuslug
            b. run python setup.py
        4. wget https://github.com/un33k/django-uuslug/zipball/master
            a. unzip the downloaded file
            b. cd into django-uuslug-* directory
            c. run python setup.py

B. Test & contribute to django-uuslug: (for developers)
    * _ git clone http://github.com/un33k/django-uuslug
            a. cd into django-uuslug
            b. run python bootstrap.py
            c. run bin/buildout -vvvvv
            d. run bin/test


Unicode Test Example
=====================
from uuslug import uuslug as slugify

s = "This is a test ---"
r = slugify(s)
self.assertEquals(r, "this-is-a-test")

s = 'C\'est déjà l\'été.'
r = slugify(s)
self.assertEquals(r, "c-est-deja-l-ete")

s = 'Nín hǎo. Wǒ shì zhōng guó rén'
r = slugify(s)
self.assertEquals(r, "nin-hao-wo-shi-zhong-guo-ren")

s = '影師嗎'
r = slugify(s)
self.assertEquals(r, "ying-shi-ma")


Uniqueness Test Example
=======================
Override your object's save method with something like this (models.py)

from django.db import models
from uuslug import uuslug as slugify

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 = slugify(self.name, instance=self)
        super(CoolSlug, self).save(*args, **kwargs)

Test:
=====
 
name = "john"
c = CoolSlug.objects.create(name=name)
c.save()
self.assertEquals(c.slug, name) # slug = "john"
  
c1 = CoolSlug.objects.create(name=name)
c1.save()
self.assertEquals(c1.slug, name+"-1") # slug = "john-1"

c1 = CoolSlug.objects.create(name=name)
c1.save()
self.assertEquals(c1.slug, name+"-2") # slug = "john-2"

ToDo:
=====
clean up README
add more test and examples

Credits:
=========
This is a cleaned and packaged up version of snippet (369) from http://www.djangosnippets.org/
Improved to handle unique slugs and unicode chars and packaged for easy install.


About

guarantee a unique unicode slug for use in Django projects. (for live demo, visit the following link and create an account)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 99.3%
  • Shell 0.7%