Simplest way to pagination, ordering and filtering at once

Every author of web application had to create a list of something, eg. list of recent blog posts, list of items in online shop etc. This seems to be very easy: just loop through the records and display them in ordered/undordered list or table (ol, ul, table). Unfortunately it quickly turns out to be much read more »

Speeding up Django templates

In general, Django is performing well but there are some cases where things are going to be slow… This post is about optimisation of django templates. If you have to process huge amount of objects and render some templates for each of them, then You’ll quickly notice that it is slow and some profiling will read more »

Groups of cache entries in memcached

Did you ever need to invalidate whole set (say group) of keys in your cache? I did, many times. This is not so hard if you have few, good known, cache keys that are considered a group. But soon it turns to be a pain to easily remove all necessary keys. Simple example: Page, that read more »

Formsety w Django (case study)

Django posiada wbudowane mechanizmy do obsługi formularzy, ma też narzędzia do obsługi całych ich zestawów, czyli formset’ów. Oba mechanizmy wiele ułatwiają, z formsetami mam jednak ten problem, że prawie nigdy nie pamiętam jak się ich używało i jak je odpowiednio skonfigurować. Dotyczy to zwłaszcza ModelFormset’ów, czyli tych operujących na Modelach (danych z bazy). Jak ustawić read more »

Django, polskie znaki i Postgres

Ostatnio parę ładnych godzin spędziłem debugując dziwny problem zaobserwowany w pewnej aplikacji. Otóż aplikacja ta działała bez problemu w środowisku deweloperskim, natomiast w środowisku testowym pola autocomplete (ajax) nie chciały znajdować użytkowników… Całość używała mniej więcej czegoś takiego MojModel.objects.filter(first_name__istartswith=’Jaś’) Wstępnie udało mi się stwierdzić, iż problem dotyczył tylko użytkowników z polskimi literkami w nazwiskach/imionach. Gorzej, read more »

Proste testowanie formularzy w Django

Django posiada wbudowane mechanizmy umożliwiające tworzenie testów. Jednym z elementów Django’wego TestCase jest klasa Client umożliwiająca zasymulowanie przeglądarki z poziomu kodu naszego testu. Przykładowe użycie tej klasy wygląda tak: from django.test.client import Client c = Client() response = c.post(‘/login/’, {‘username’: ‘john’, ‘password’: ‘smith’}) Super… ale czy na pewno? Ostatnio natrafiłem na dość uciążliwe w testowaniu read more »

Widgety z contrib.admin w naszej aplikacji

Standardowe widgety znajdujące się w django.forms.widgets często okazują się być zbyt ubogie dla naszych aplikacji. Typowym przykładem może być widget dla pola DateField, który renderuje się jak zwyczajne pole tekstowe (a gdzie jakiś kalendarzyk?). Inny przykład to widget dla FileField, który podczas edycji obiektu nie wyświetla informacji o już załadowanym pliku i w efekcie nie read more »