cayco

 
2006-02-20 17:40:00

Polskie znaki w polu slug


Dział: blog
zdjecie

Co zrobić żeby Django poprawnie generował polskie znaki w polach typu slug?


Postępując zgodnie z instrukcjami w blogu rossp.org pole slug nie będzie poprawnie generowane. Nasze rodzine "ogonki" zostaną po prostu wycięte. Aby uzyskać poprawny i ładny adres trzeba pogrzebać trochę w Django. Nie jest to elegancki sposób ale na pewno skuteczny.

Za zamianę literek w polu slug odpowiada funkcja w pliku urlify.js. Jest ona zaszyta w dystrybucji Django ale można wykorzystać swoją. Ja zrobiłem tak, że dodałem plik urlify.js do modelu:

     class META:
        admin = meta.Admin(

...
            js = (
                'js/urlify.js',
            ),
        )

 położenie pliku jest nieważne ale oczywiście powinien być dostępny dla przeglądarki.

 Sam plik po przykładowych przeróbkach wygląda tak:

function URLify(s, num_chars) {
// changes, e.g., "Petty theft" to "petty_theft"
// remove all these words from the string before urlifying
removelist = ["i", "od", "do", "z", "w", "o", "a", "for", "from",
"is", "in", "into", "like", "of", "off", "on", "onto", "per",
"since", "than", "the", "this", "that", "to", "up", "via",
"with"];
r = new RegExp('\\b(' + removelist.join('|') + ')\\b', 'gi');
s = s.replace(r, '');
s = s.replace(/ę/i,'e');
s = s.replace(/ż/i,'z');
s = s.replace(/ó/i,'o');
s = s.replace(/ł/i,'l');
s = s.replace(/ć/i,'c');
s = s.replace(/ś/i,'s');
s = s.replace(/ź/i,'z');
s = s.replace(/ń/i,'n');
s = s.replace(/ą/i,'a');

s = s.replace(/[^-A-Z0-9\s]/gi, ''); // remove unneeded chars
s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces
s = s.replace(/\s+/g, '-'); // convert spaces to hyphens
s = s.toLowerCase(); // convert to lowercase
return s.substring(0, num_chars);// trim to first num_chars chars
}
 I powinno działać ;-) 

Wydrukuj stronę

Komentarze

Bądź pierwszym komentującym ten artykuł!

Dodaj swój komentarz

Twoje imię:

Komentarz: