Devel.cz Lupa Měšec Podnikatel Root Zdroják.cz DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Vlákno názorů k článku
Django: Zpracovávání formulářů

Honza Kral
Honza Kral (neregistrovaný) ---.chservices.cz
2. 10. 2009 13:36

unicode a prace se stringy

Prosim vyhnete se pouzivanim bytestringu (str()) v djangu, zejmena v kombinaci s unicode stringy. Vede to k osklivym errorum ktere jsou tezko odhalitelne protoze se vyskytuji jen nekdy, vsude pouzivejte unicode.

Rovnez opetovne scitani stringu (byte i unicode) je vhodne se vyhnout, je to neumerne draha operace:

out = [message]
for item in ['name', 'email', 'phone', 'reaction', 'text']:
  if unicode(form.cleaned_data[item]):
    out.extend([form[item].label, u': ', unicode(form.cleaned_data[item]), u'\n'])
message = ''.join(out)

Nehlede na to, ze pokud mym zamerem je jen odeslat data v emailu, neni vhodne pozadovat po Djangu aby vstupy z formulare prevadelo na datove typy pythonu (Boolean) jen proto abych je pak prevedl zpet, ChoiceField by v tomto pripade vyhovoval mnohem vic a usetril by dost kodu (vsechny prevody na unicode v zobrazenem view).

Pavel Dvořák
2. 10. 2009 13:50

Re: unicode a prace se stringy

Máte naprostou pravdu, všude by měla být použita metoda unicode, ne str. Omlouvám se za to, nestihl jsem kód dostatečně otestovat. (Hlavně že tam o tom píšu, že je na tom místě potřeba použít unicode řetězce…)

Zasílat nově přidané příspěvky e-mailem