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``code 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" 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.
aleksey-rezvov/django-uuslug
guarantee a unique unicode slug for use in Django projects
PythonBSD-3-Clause