Hay un paquete de Python llamado python-slugify, que hace un buen trabajo de slugificar:
pip install python-slugify
Funciona así:
from slugify 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 = 'Nín hǎo. Wǒ shì zhōng guó rén'
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")
Ver más ejemplos
Este paquete hace un poco más de lo que publicó (eche un vistazo a la fuente, es solo un archivo). El proyecto todavía está activo (se actualizó 2 días antes de que respondiera originalmente, más de siete años después (última consulta 2020-06-30), todavía se actualiza).
cuidado : hay un segundo paquete, llamado slugify. Si tiene ambos, es posible que tenga un problema, ya que tienen el mismo nombre para la importación. El que acabo de nombrar slugifyno hizo todo lo que verifiqué rápidamente: se "Ich heiße"convirtió "ich-heie"(debería ser "ich-heisse"), así que asegúrese de elegir el correcto cuando use pipo easy_install.