
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ć ;-)
Bądź pierwszym komentującym ten artykuł!
Dodaj swój komentarz