Archive for the 'Django' Category

Mac OS X: decoder jpeg not available

If you are using PIL(Python Imaging Library) on Mac OS X(Tiger), you will probably have a “decoder jpeg not available” when resizing a jpeg image.
This probably means that PIL doesn’t have JPEG support, because libjpeg wasn’t found when PIL was being configured.
Here is the solution:

  • Download, compile and install jpeglib and zlib
  • Edit PIL setup.py and change to:

    JPEG_ROOT = "/usr/local/include"
    ZLIB_ROOT = "/usr/local/include"
    
  • Compile:

    python setup.py build_ext -i
    
  • Test:

    python selftest.py
    
  • If the result is something like this:

    "57 tests passed."
    
  • You are ready to go:

    python setup.py install
    

Pro Django: Web Development Done Right

Pro Django: Web Development Done Right

The first book about Django was released is available for pre-order at amazon.
The authors are Adrian Holovaty and Jacob Kaplan-Moss, both involved in the project.
This book will definitively be my next buy.

The first part of the book introduces Django fundamentals like installation and configuration. You’ll learn about creating the components that power a Django-driven web site. The second part delves into the more sophisticated features of Django, like outputting non-HTML content (such as RSS feeds and PDFs), plus caching and user management. The third part serves as a detailed reference to Django’s many configuration options and commands. The book even includes seven appendixes for looking up configurations options and commands. In all, this book provides the ultimate tutorial and reference to the popular Django framework.

Django is the favourite of Guido van Rossum

Django Project

Guido van Rossum said in the latest FLOSS Weekly podcast:

My personal favorite — and I expect that that will remain a personal favorite for a long time — is something named Django. … I highly recommend it.

Django has been my tool for a new project of mine, has been worth it the time spent learning Django and Python(right now my personal favourite programming language).
Django preferred setup is Apache with mod_python, this has make my choice easier because I’ve been always using Apache with PHP.
If you want to give it a try(I recommend it), read the Part 1 of the tutorial.
And if you have doubts about performance, read this.

Django Admin interface for a Blog in 5 mins

It’s so cool with Django:

from django.db import models
from django.contrib.auth.models import User

class Tag(models.Model):
    name = models.CharField(maxlength=200, core=True)

    class Admin:
        ordering = ['name']   

    def __str__(self):
        return self.name

PUBLICATION_CHOICES = (
    ('Draft', 'Draft'),
    ('Published', 'Published'),
)

class Post(models.Model):
    author = models.ForeignKey(User)
    title = models.CharField(maxlength=200)
    summary = models.TextField()
    body = models.TextField()
    created = models.DateTimeField(default=models.LazyDate())
    last_modified = models.DateTimeField(auto_now=True)
    enable_comments = models.BooleanField(default=True)
    tags = models.ManyToManyField(Tag)
    publication = models.CharField(maxlength=32, choices=PUBLICATION_CHOICES, radio_admin=True, default='Published')

    class Admin:
        ordering = ['-created']
        search_fields = ['title']
        list_display = ('title','author', 'created')
        list_filter = ('created','last_modified','enable_comments','publication', 'tags')

    def __str__(self):
        return self.title

class Comment(models.Model):
    post = models.ForeignKey(Post)
    name = models.CharField(maxlength=100)
    email = models.EmailField()
    website = models.CharField(maxlength=200, blank=True, null=True)
    comment = models.TextField()
    created = models.DateTimeField(auto_now_add=True)
    last_modified = models.DateTimeField(auto_now=True)

    class Admin:
        ordering = ['-created']
        search_fields = ['name']
        list_display = ('post','name', 'created')
        list_filter = ('created','last_modified')

    def __str__(self):
        return self.name