based on https://docs.djangoproject.com/en/1.5/intro/