Najważniejszą rzeczą, jaką powinniście wiedzieć na temat filtra pluralize jest ta, żeby go nigdy nie używać. Nigdy. Jego istnienie wynika z lenistwa ludzi, którzy nigdy w życiu nie przygotowywali aplikacji do tłumaczenia. Jeśli nie wyraziłem się dość jasno, używanie filtra pluralize wywoła u ciebie raka, stereoporoże i zatwardzenie rozsiane.
Jakkolwiek sprytnie by nie wyglądał, ten kod […]
Posts Tagged ‘python’
Django: pluralize
Python: alternatywa dla dict.update
Kolejny skrót. Dość regularny przypadek zwrócenia sumy słowników bez niszczenia któregokolwiek z nich:
def foo(bar, baz):
tmpdict = dict(bar)
tmpdict.update(baz)
return tmpdict
Można również rozwiązać inaczej, korzystając z faktu, że dict akceptuje nazwane parametry:
def foo(bar, baz):
return dict(bar, **baz)
Korzystając ze skrótów zawsze upewnij się, że na […]
Django: direct_to_template
Nie wiem, czemu niektórzy tak uparcie korzystają z funkcji render_to_response, by za każdym razem przekazać do niej ręcznie stworzony obiekt kontekstu. Zresztą, sami oceńcie, która wersja jest ładniejsza:
from django.shortcuts import render_to_response
from django.template import RequestContext
def foo(request):
# …
return render_to_response(‘foo.html’, {‘bar’: baz},
[…]
Python: prawdziwy polimorfizm
Taki weekendowy żarcik:
#!/usr/bin/env python
import random
class Foo(random.choice([int, str, unicode, Exception])):
pass
f = Foo(‘1’)
print ‘f‘
Django: szybszy SQLite do testów
Domyślna konfiguracja SQLite każe mu synchronizować plik bazy po każdej operacji. W środowiskach testowych nie musimy się martwić o spójność danych w wypadku awarii, poniżej zamieszczam więc backend pozbawiony zbędnego narzutu:
from django.db.backends.sqlite3.base import (
DatabaseWrapper as Sqlite3Wrapper,
DatabaseError,
IntegrityError,
DatabaseFeatures,
[…]
Django: alternatywa dla Form.as_table()
Domyślna struktura generowana przez metodę django.forms.Form.as_table pozostawia nieco do życzenia. Stąd nieco wygodniejsza i nieinwazyjna wersja w postaci filtra (zastanawiam się, czemu ta wbudowana w Django ma postać metody):
from django.template.loader import render_to_string
@register.filter
def as_table(form):
return render_to_string(‘form_as_table.html’, {‘form’: form})
Do kompletu przykładowy szablon:
{% for f in form %}
{% if f.errors %}
<tr […]
Django: Decimal i simplejson
Moduł django.utils.simplejson nie obsługuje domyślnie typu decimal.Decimal. Na szczęście da się podać własny mechanizm kodowania nieznanych typów:
import decimal
def json_encoder(value):
if isinstance(value, decimal.Decimal):
return float(str(value))
else:
raise TypeError
from django.utils import simplejson
print simplejson.dumps([decimal.Decimal(‘1.2′)], default=json_encoder)
Python: Utop sierotki w zupie
Ot, taki znak, że nie umarłem. Dziś w programie dość popularny błąd składu, choć wielu uważa, że internetu reguły nie dotyczą. A sierotki wykończymy tak:
import re
def sierotki(text):
reg = re.compile(u’\b(a|i|o|u|w|z)\b\s+’)
return reg.sub(u’\1u00a0’, text)
Niestety, na ogół mamy do czynienia z tekstem zawierającym znaczniki:
import re
from BeautifulSoup import BeautifulSoup
def sierotki(text):
[…]
Python, Whoosh i błędy
Tytułem wstępu: Whoosh to bardzo przyjemny silnik indeksujący i wyszukujący dokumenty w trybie full-text. Niestety, masa ludzi ma problemy z jego wdrożeniem.
Objawy
Główne objawy to:
OSError: [Errno 17] File exists: ‘/path/to/index/cache/_MAIN_LOCK’
oraz:
IOError: [Errno 2] No such file or directory: ‘/path/to/index/cache/_MAIN_123.tiz’
Oba z nich są na ogół różnymi objawami faktu, że więcej niż jeden proces próbuje używać tego samego indeksu […]
Django hack: wiele domen i jedna instancja
Pozwala serwować wiele domen za pomocą jednego tylko projektu Django. Inspiracją był ten snippet.
Zmiany w settings.py:
from threading import local
SITE_THREAD_INFO = local()
SITE_THREAD_INFO.SITE_ID = 1
class SiteIDHook(object):
def __int__(self):
return SITE_THREAD_INFO.SITE_ID
def __hash__(self):
return SITE_THREAD_INFO.SITE_ID
SITE_ID = SiteIDHook()
Nowa klasa […]

