Django community: Community blog posts RSS
This page, updated regularly, aggregates Community blog posts from the Django community.
-
New Site! (Well, Most of One Anyway)
I haz a new site! I've been hacking at this for a few months now in my free time and it's finally in a position where I can replace the old one. Some of the features of the old site aren't here though, in fact this one is rather limited by comparison (no search, no snapshots, etc.) but the underlying code is the usual cleaner, better, faster, more extendable etc. so the site will grow beyond the old one eventually. So, fun facts about this new version: Written in Python, based on Django. 317133 lines of code Fun libraries used: Flot (for the résumé skillset charts) Neat stuff I added: A new, hideous design! A hierarchical tagging system A custom image resizing library. I couldn't find a use for the other ones out there. The Konami Code. Try it, it's fun :-) Stuff that's coming: Search Mobile image upload (snapshots) The image gallery will be up as soon as the shots are done uploading. Anyway, if you feel so inclined, please poke around and look for problems. I'll fix them as soon as I can. -
Diapositivas del Curso de Django en Deusto
Ya están en SlideShare las diapositivas del curso "Django: Disfruta programando" que han impartido Jaime Irurzun y Jorge Bastida en la Univesidad de Deusto. Aquí las tenéis y también podéis descargar el código del curso desde aquí. -
Vídeos de la Djangocon inspiradors
Aquests darrers dies he estat mirant els vídeos de la darrera Djangocon, com a tota conferència hi ha gent que vol una cosa més tècnica i gent que la troba massa tècnica, però particularment trob que al la quantitat de conferències i lightning talks que hi ha qui no ha trobat el que volia segurament és perquè no ha cercat prou. Jo he trobat molt interessants dues conferències, Scaling the World's Largest Django Application de la gent de DisqUs i Switching addons.mozilla.org from CakePHP to Django de la gent de Mozilla add-ons. M'interessen molt perquè mostre tant els problemes com la capacitat de Django per escalar per aplicacions molt grans, molt més grans del que estam acostumats per les nostres contrades. En el cas de Mozilla les xifres que donen el rendiment de programació estan en la línia del les meves pròpies recerques: una aplicació Django necessita de l'ordre de 3-5 vegades més línies de codi que per fer-la en PHP un framework com Cake. Aquests projectes tan grans fan que s'hagin de cercar solucions a problemes comuns d'escalabilitat. L'interessant d'aquests conferències és que et diuen tant els problemes que s'han trobat com les solucions. Pel Twitter he postejat algunes … -
Joining Mozilla
Happy to announce that at the end of October I'll be joining Mozilla. I'll be working in the web team on the Django sites. Excited to be working with a great team of people on some cool sites. -
Filtering Dropdown Lists in the Django Admin
It's not immediately obvious how to filter dropdown lists in the Django admin interface. This article will talk about how ForeignKeys can be filtered in Django ModelForms and then the Django admin. -
Filtering Dropdown Lists in the Django Admin
Automatically-generated dropdown lists can seem a little mysterious at first - particularly when you first want to customise what they contain in the Django admin. I'm going to go through a number of examples of increasing complexity of customising the content of dropdowns in various contexts: ModelForms, and then into the Django admin. Here are the models that the examples will work with. They're abbreviated and slightly modified versions of some models from the Swoop project I'm currently working on: class Area(models.Model): title = models.CharField(max_length=100) area = models.MultiPolygonField(blank=True, null=True) class Trip(models.Model): title = models.CharField(max_length=100) area = models.ForeignKey(Area) class Landmark(models.Model): title = models.CharField(max_length=100) point = models.PointField() class MountaineeringInfo(models.Model): trip = models.ForeignKey(Trip) area = models.ForeignKey(Area, blank=True, null=True) base_camp = models.ForeignKey(Landmark, blank=True, null=True) As you can see, we're using GeoDjango here - I'm not going to talk much about that here, but it should be obvious what's going on when we get it it. Note that these examples assume Django 1.2. Here are the cases that this article will cover: Filtering a forms.ModelForm's ModelChoiceField Filtering a Django admin dropdown Filtering a Django admin dropdown in an inline, based on a value on the main instance (phew!) Filtering a form's ModelChoiceField Consider this form: … -
Filtering Dropdown Lists in the Django Admin
Automatically-generated dropdown lists can seem a little mysterious at first - particularly when you first want to customise what they contain in the Django admin. I'm going to go through a number of examples of increasing complexity of customising the content of dropdowns in various contexts: ModelForms, and then into the Django admin. Here are the models that the examples will work with. They're abbreviated and slightly modified versions of some models from the Swoop project I'm currently working on: class Area(models.Model): title = models.CharField(max_length=100) area = models.MultiPolygonField(blank=True, null=True) class Trip(models.Model): title = models.CharField(max_length=100) area = models.ForeignKey(Area) class Landmark(models.Model): title = models.CharField(max_length=100) point = models.PointField() class MountaineeringInfo(models.Model): trip = models.ForeignKey(Trip) area = models.ForeignKey(Area, blank=True, null=True) base_camp = models.ForeignKey(Landmark, blank=True, null=True) As you can see, we're using GeoDjango here - I'm not going to talk much about that here, but it should be obvious what's going on when we get it it. Note that these examples assume Django 1.2. Here are the cases that this article will cover: Filtering a forms.ModelForm's ModelChoiceField Filtering a Django admin dropdown Filtering a Django admin dropdown in an inline, based on a value on the main instance (phew!) Filtering a form's ModelChoiceField Consider this form: … -
Filtering Dropdown Lists in the Django Admin
Automatically-generated dropdown lists can seem a little mysterious at first - particularly when you first want to customise what they contain in the Django admin. I'm going to go through a number of examples of increasing complexity of customising the content of dropdowns in various contexts: ModelForms, and then into the Django admin. Here are the models that the examples will work with. They're abbreviated and slightly modified versions of some models from the Swoop project I'm currently working on: class Area(models.Model): title = models.CharField(max_length=100) area = models.MultiPolygonField(blank=True, null=True) class Trip(models.Model): title = models.CharField(max_length=100) area = models.ForeignKey(Area) class Landmark(models.Model): title = models.CharField(max_length=100) point = models.PointField() class MountaineeringInfo(models.Model): trip = models.ForeignKey(Trip) area = models.ForeignKey(Area, blank=True, null=True) base_camp = models.ForeignKey(Landmark, blank=True, null=True) As you can see, we're using GeoDjango here - I'm not going to talk much about that here, but it should be obvious what's going on when we get it it. Note that these examples assume Django 1.2. Here are the cases that this article will cover: Filtering a forms.ModelForm's ModelChoiceField Filtering a Django admin dropdown Filtering a Django admin dropdown in an inline, based on a value on the main instance (phew!) Filtering a form's ModelChoiceField Consider this form: … -
Back to the Tables…
… or how table based layout still lives When I first started to write HTML (about ten years ago) the web has nothing common to the current one. Modem connections, IE4/IE5 were the major browsers and Netscape was far far away in the competition. These were dark ages for the web. CSS was a new [...] -
Python, Unicode and UnicodeDecodeError
In the years I've been developing in Python, Unicode seems to be the topic which causes the greatest amount of confusion amongst developers. Hopefully much of this confusion should go away in Python 3, for reasons I'll come to at the end; but until then, the UnicodeDecodeError is the bane of many developers' lives. -
Conheça o Django Packages
Conheça o Django Packages -
Conheça o Django Packages
Conheça o Django Packages -
Python, Unicode and UnicodeDecodeError
Unicode and Encodings OK, let's take a step away from text for a moment. I want you to think of a number between one and ten. Got one? Great - now, grab a pen and paper, and write it down.What number did you think of? Well, I thought of the number six. And when I wrote it down, it looks like this: Of course, if I were an ancient Roman (or possibly a clockmaker), I could have written this: They all mean the same thing - the number six. But we've written them in different ways. In other words, we've 'encoded' our idea of the number six in our head in three different ways - three different encodings.The separation of the idea of 'the number six' from its actual representation is basically all Unicode is. The Unicode Character set (UCS) defines a set of things (loosely, a set of letters) that we can represent. How we represent each of those letters is called an encoding. There's only one Unicode, but there are many encodings. In Unicode parlance, each of those 'things' (letters) are known as 'code points'. Unicode separates the characters' meaning from their representation.For historical reasons, the most common … -
Python, Unicode and UnicodeDecodeError
Unicode and Encodings OK, let's take a step away from text for a moment. I want you to think of a number between one and ten. Got one? Great - now, grab a pen and paper, and write it down.What number did you think of? Well, I thought of the number six. And when I wrote it down, it looks like this: Of course, if I were an ancient Roman (or possibly a clockmaker), I could have written this: They all mean the same thing - the number six. But we've written them in different ways. In other words, we've 'encoded' our idea of the number six in our head in three different ways - three different encodings.The separation of the idea of 'the number six' from its actual representation is basically all Unicode is. The Unicode Character set (UCS) defines a set of things (loosely, a set of letters) that we can represent. How we represent each of those letters is called an encoding. There's only one Unicode, but there are many encodings. In Unicode parlance, each of those 'things' (letters) are known as 'code points'. Unicode separates the characters' meaning from their representation.For historical reasons, the most common … -
Python, Unicode and UnicodeDecodeError
Unicode and Encodings OK, let's take a step away from text for a moment. I want you to think of a number between one and ten. Got one? Great - now, grab a pen and paper, and write it down.What number did you think of? Well, I thought of the number six. And when I wrote it down, it looks like this: Of course, if I were an ancient Roman (or possibly a clockmaker), I could have written this: They all mean the same thing - the number six. But we've written them in different ways. In other words, we've 'encoded' our idea of the number six in our head in three different ways - three different encodings.The separation of the idea of 'the number six' from its actual representation is basically all Unicode is. The Unicode Character set (UCS) defines a set of things (loosely, a set of letters) that we can represent. How we represent each of those letters is called an encoding. There's only one Unicode, but there are many encodings. In Unicode parlance, each of those 'things' (letters) are known as 'code points'. Unicode separates the characters' meaning from their representation.For historical reasons, the most common … -
Class-based Views with Django-Baseviews
I've always loved the concept of class-based views because views often become repetitive. There are a lot of common operations in a view that work best when they are defined once and reused. Class inheritance, in my opinion, is the best way to keep views DRY and allow you to focus on what makes each view different. At first, I used to break out pieces of functionality into their own functions in the views.py file. This worked okay, but I had to pass a lot of data around in the arguments and I had to do a lot of imports if I had functions from other app's views that I wanted to use in this app. This quickly became tedious. After seeing django-haystack use class-based views and really loving the way I could customize their behavior for my own project, I decided to start building some base views of my own to build on. While working on new Pegasus News apps, I started building up a set of class-based views that helped me stop repeating everything that the views had in common. Once the base views were in place, the process of creating new views for my apps because a … -
On DjangoCon 2010 and conferences in general
Sunlight Labs is a huge fan of Django. We use it in a majority of the projects we produce here and have released the source of numerous applications. So a few weeks ago a bunch of us eagerly packed our bags and flew out to Portland, OR for DjangoCon 2010. DjangoCon: The Good Parts Rethinking the Reusable Application Paradigm Alex Gaynor's talk "Rethinking the Reusable Application Paradigm", though a whirlwind of information, was one of the best of the conference. Reusable applications have long been a selling point of Django, but it is often quite difficult to use apps in any situation that would require the most basic of customization. Alex's talk covered the things that most frequently prevent apps from being reused and possible solutions to get around the limitations. The ideas he offered were both practical and enjoyably complex. I look forward to implementing some of them in our applications. Lightning Talks As always, the lightning talks were a highlight of the conference. It's a chance for people to show off novel solutions to problems or propose their crazy ideas. Some of the best included: Eric Holscher demoed Read The Docs, a documentation creation and hosting service. If … -
Django-taggit, le tag est mort, vive le tag ..
J'ai déjà fait, il y en fait 11 mois, un billet de la django app du mois sur une app de tag, django-tagging. Lorsque je l'ai testé, django-tagging était à la version 0.3. Aujourd'hui, elle est version 0.3.1. Et les derniers commit remonte à janvier 2010 ( ce sont ceux ayant aboutis à la ... -
JOINs via denormalization for NoSQL coders, Part 2: Materialized views
In part 1 we discussed a workaround for JOINs on non-relational databases using denormalization in cases for which the denormalized properties of the to-one side don't change. In this post we'll show one way to handle JOINs for mutable properties of the to-one side i.e. properties of users. Let's summarize our current situation: We have users (the to-one side) and their photos (the to-many side) Photos contain their users' gender in order to use it in queries which would need JOINs otherwise It's obvious that a solution for the problem of mutable properties on the to-one side has to keep denormalized properties up to date i.e. each time the user changes his/her gender (or more likely her hair color ;) we have to go through all of the user's photos and update the photos' denormalized gender. It is clear that we get into problems here if a user has thousands of photos to update because such an update would take too long. We need a scalable way to deal with such updates. Background tasks to the rescue One way to solve the update-problem is to start a background task each time a user changes his/her gender. It's clear that this … -
Autobench Cloud
After seeing Nicholas Piël benchmark a bunch of Python web servers, I was just itching to try some different configurations. So, I thought I would try to copy his autobench setup to do some testing of my own. The problem is, where do you get several computers to run the benchmark? And having to recompile httperf on several machines would be a lot of work. Amazon EC2 and Ubuntu to the rescue! The key was that I wanted to be able to launch several instances at once and only have to connect to one of them to control them all. I thought I would have to build a custom AMI because I only wanted to do the custom configuration once. Turns out, I was wrong. Ubuntu provides ready-to-go images that can be instantiated with a custom script. So, the first thing to do is pick the AMI you want to use from the link above. I went with us-east-1, 32bit, and EBS root so that I could use micro instances. You can choose instance root if you want to use small instances. Next, make sure you have a security group (I created a new one called Autobench) that permits both … -
Autobench Cloud
After seeing Nicholas Piël benchmark a bunch of Python web servers, I was just itching to try some different configurations. So, I thought I would try to copy his autobench setup to do some testing of my own. The problem is, where do you get several computers to run the benchmark? And having to recompile httperf on several machines would be a lot of work. Amazon EC2 and Ubuntu to the rescue! The key was that I wanted to be able to launch several instances at once and only have to connect to one of them to control them all. I thought I would have to build a custom AMI because I only wanted to do the custom configuration once. Turns out, I was wrong. Ubuntu provides ready-to-go images that can be instantiated with a custom script. So, the first thing to do is pick the AMI you want to use from the link above. I went with us-east-1, 32bit, and EBS root so that I could use micro instances. You can choose instance root if you want to use small instances. Next, make sure you have a security group (I created a new one called Autobench) that permits both … -
Django Patterns: View Decorators
Problem and Analysis Sites often have many views that operate with a similar set of assumptions. Maybe there are entire areas that the user must be logged-in to visit, or there is some repetitive boilerplate functionality that a group of views shares like being rate-limited. Bolting on "login required" or "rate limiting" functionality can be a bit repetitive since it often requires "bail out early" logic. Take for example a simple rate-limiting implementation: syntax:python def simple_rate_limiting(request, duration=10): # grab the end-user's IP address remote_addr = request.META.get('REMOTE_ADDR') # create a cache key combining IP and url requested key = '%s.%s' % (remote_addr, request.get_full_path()) # if the key exists then the user has been here recently if cache.get(key): return True else: cache.set(key, 1, duration) return False def rate_limited_view(request): if simple_rate_limiting(request): return HttpResponseForbidden('Slow down!') # normal view logic continues here # There is nothing particularly bad about this implementation - we are checking for a condition based on the request and if necessary bailing out early. The problem starts to appear when additional "common" components get added to the mix, such as: loading an object based on a url param checking for auth adding something to the template context/response And now for a … -
DjangoCon 2010 report I
-
JOINs via denormalization for NoSQL coders, Part 1: Intro
Non-relational databases like App Engine or MongoDB natively don't support operations like JOINs because they don't scale. However in some situations there just exists the need to use such operations. This is the first part of a series presenting one way to handle JOINs (at first in the to-one direction) on NoSQL databases while maintaining scalability. Additionally you'll learn some useful NoSQL coding techniques throughout this series. Why would I need JOINs? Let's take the example of users and their photos. Here users represent the to-one side and photos the to-many side: It's common that users have the possibility to search for pictures of other users. While searching for photos of a specific user is easy to achieve on non-relational databases via Photo.objects.filter(user=some_user) for example, searching for photos of users given some specification like Photo.objects.filter(user__gender='female', popularity='high') isn't equally simple to achieve. Obviously we need JOINs here (which aren't supported on NoSQL databases) because we span a filter over two models. A straightforward solution to this problem is to get all female users first and then to get all popular photos whose user property points to these users: user_pks = User.objects.filter(gender='female').values('pk') female_user_photos = Photo.objects.filter(user__in=user_pks, popularity='high') Getting only the primary keys of … -
Looking for a disciplined Software Developer
At 2degrees we're looking for an experienced and disciplined Software Developer to work on the Django-based back-end of our Web site, as well as implement AJAX-based functionality from time to time.Prior Python, Django or JavaScript experience is desirable but not strictly necessary as we are looking to hire the best Software Developer we find regardless of the technologies they've used in the past.Learn more about this position and contact us if you're interested!