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?

...

Djangowe ciekawostki

06 25 2009

In Django, Python

Dodaj komentarz

  1. Kod django wykonywany jest tylko jednokrotnie w ramach jednej instancji serwera (cokolwiek to znaczy). Czyli print 'lool' w models.py zostanie wykonane tylko raz. Również obiekty utworzone w ten sposób "zapamiętują" swój stan pomiędzy requestami. Bug or feature? Czy to zadziała w każdym przypadku?
  2. Signal.connect w Middleware.process_request czasem działa, a czasem nie. Truly random. Mimo problemów wynikających z pkt 1 connecty najlepiej robić w ciele models.py, ewentualnie w management.py w przpadku post_syncdb.
  3. Pythonicznie - classobj vs. type, może warto się przyjrzeć

Instalacja PIL na OS X

06 14 2009

In Python

Dodaj komentarz

Winowajca - python2.5 z python.org, wszystko jebie się chyba przez to, że nie jest to wersja na x86_64 instalator przyjmuje że jestem na ppc... Solution - ściągnąć source PIL, skomplilować z pythona macports (/opt/local/bin/python), dodać do .bash_profile
export PYTHONPATH=/Library/Python/2.5/site-packages/PIL:${PATH}
Podobno potrzeba też libjpeg:
cp /usr/share/libtool/config.sub .
cp /usr/share/libtool/config.guess .
./configure --enable-shared --enable-static
make
sudo make install
sudo ranlib /usr/local/lib/libjpeg.a
...ale to nie działa z django. Better solution - gotowa paczka