Wordpress'te "Tanrı Yanılgısı" diye bir başlık attığınızda, WordPress'in sizin için urettiği URL'e bakalım:

http://blog.gokmengorgen.net/2010/09/09/tanri-yanilgisi/

Tam istediğimiz gibi. Django ile bir blog uygulaması yazıyor olsaydım, sanırım biraz sıkıntı çekecektim:

In [1]: from django.template.defaultfilters import slugify
In [2]: slugify('Tanrı Yanılgısı')
Out[2]: u'tanr-yanlgs'

Gitti ı'lar... Turkçe karakterler arasından Django'nun slugify'sinde çalışmayan tek karakter kuçuk harfle yazılmış 'ı'. Baştan slugify fonksiyonuna bir yama yapıp Django ekibine gondermeyi duşundum; fakat sadece Turkçe'yi dikkate aldığım için buyuk ihtimalle yamam reddedilecekti. Ben de bir utils.py dosyası açıp şoyle bir slugify fonksiyonu yazdım:

1
2
3
4
5
6
def slugify_unicode(value):
    value = value.replace(u'\u0131', 'i')
    value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore')
    value = unicode(re.sub('[^\w\s-]', '', value).strip().lower())

    return mark_safe(re.sub('[-\s]+', '-', value))

Bu fonksiyonu iPython'da denediğinizde patlıyor; ama sitede kullandığınızda herhangi bir sorunla karşılaşılmıyor. Bunun sebebi, 'ı' harfinin iPython konsolunda u0131 olarak donmemesinden kaynaklanıyor:

In [5]: u"Tanrı Yanılgısı" Out[5]: u'Tanr\xc4\xb1
Yan\xc4\xb1lg\xc4\xb1s\xc4\xb1'

Bu bana Python'un garipliği gibi geliyor ve Python3'te sorunun duzeltildiğini soyluyorlar (Python3'te unicode default olacak). Henuz denemedim. Emin olmamakla birlikte, slugify fonksiyonu için değer olarak verdiğim başlığın Django'dan "Tanrı Yanılgısı" olarak değil de, "Tanru0131 Yanu0131lgu0131su0131" çekilmesinden kaynaklanıyor:

In [24]: x = u"Tanr\u0131 Yan\u0131lg\u0131s\u0131"
In [25]: x
Out[25]: u'Tanr\u0131 Yan\u0131lg\u0131s\u0131'
In [26]: slugify_unicode(x)
Out[26]: u'tanri-yanilgisi'