Blog Pyetras 
02

Zażółć Gęślą Jaźń w Django

Wszyscy developerzy Django, których kiedykolwiek zainteresował/zaskoczył unikodowy galimatias w Pythonie zapewne wiedzą, że modele i poszczególne pola typu CharField, TextField itd. zwracają swoje wartości w unicode. W związku z tym kod typu

 
"Mój wspaniały artykuł - %s"%model.title
 

nie zadziała z powodu niezgodności formatów łączonych łańcuchów (unicode i nieunicode). Mogłoby się wydawać, że wystarczy dopisać # -*- coding: UTF-8 -*- na początku pliku z owym kodem oraz dodać magiczną literkę u przed stringiem:

 
u"Mój wspaniały artykuł - %s"%model.title
 

jednak i tu napotkamy lipę - problemy z kodowaniem. Rozwiązaniem jest dosyć rozwlekła jak na pythona linijka:

 
unicode("Mój wspaniały artykuł - %s", "utf-8")%model.title
 

Dodatkowo, jeżeli umieszczamy ten kod np w funkcji __str__ jakiegoś obiektu, całość należy ująć w nawias i doklepać na końcu .encode('utf-8')

Pytanie moje brzmi - czy można szybciej? ...