Django community: Community blog posts RSS
This page, updated regularly, aggregates Community blog posts from the Django community.
-
Passing variables to named patterns via {% url %} in Django templates
When coding Django one of my most important goals is avoiding all kind of hardcoded urls in my applications. Let's see this line from one of my app's URLConf: url(r'^edit/object/(?P<object_id>\w+)/$', 'object_edit', name='object_edit'), This points to a page like /edit/object/123, notice I'm using a named pattern here, and calls a view defined with: def object_edit(request, object_id): Then I can do what I need with the object identified by object_id. Now, imagine I have a list of objects in a template so I can add an edit link to each one of them, something like this: <a href="{% url object_edit object_id=4}">edit object</a> Notice that 4? I put it there just for making my point clear, what I really want to do is something like: <a href="{% url object_edit object_id={{ object.object_id }} %}">edit object</a> but that produces an error like this: TemplateSyntaxError at ... Could not parse the remainder: '{{' from '{{'. It seems a template variable can't be used inside a {% url %} tag, and I guess the same applies to any template tag. After thinking a bit about how other tags work with variables, the {% for %} loop for example, I decided to get rid of the {{ and … -
PYTHONPATH and configuring Django with Apache and mod_python
One more post about my experience coding a Django application for Facebook. Let's discuss a little about correctly setting up Apache and mod_python. Most of the steps are very well described on Django's documentation but you may need a few more details. Let's see. <!--break--> The importance of PYTHONPATH According to the official documentation this is what you need on your Apache's site configuration to setup Django: <Location "/mysite/"> SetHandler python-program PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE mysite.settings PythonOption django.root /mysite PythonPath "['/path/to/project'] + sys.path" PythonDebug On </Location> Obviously PythonDebug On should not appear, or should be set to Off, on a production environment. The lines above assume that your Django project is called mysite and the site is on http://example.com/mysite. And even if the documentation mentions how to handle PYTHONPATH via mod_python I didn't have a clear picture of the whole thing after running my first failed tests. I decided to setup a site dedicated just to my Django project, you can use name based or IP based virtual hosts on Apache, and I want to access it from the root: http://example.com/. Also, I store all my Python related stuff in /home/alexis/python-work hence the project will be at /home/alexis/python-work/project and its … -
PYTHONPATH and configuring Django with Apache and mod_python
One more post about my experience coding a Django application for Facebook. Let's discuss a little about correctly setting up Apache and mod_python. Most of the steps are very well described on Django's documentation but you may need a few more details. Let's see. <!--break--> The importance of PYTHONPATH According to the official documentation this is what you need on your Apache's site configuration to setup Django: <Location "/mysite/"> SetHandler python-program PythonHandler django.core.handlers.modpython SetEnv DJANGO_SETTINGS_MODULE mysite.settings PythonOption django.root /mysite PythonPath "['/path/to/project'] + sys.path" PythonDebug On </Location> Obviously PythonDebug On should not appear, or should be set to Off, on a production environment. The lines above assume that your Django project is called mysite and the site is on http://example.com/mysite. And even if the documentation mentions how to handle PYTHONPATH via mod_python I didn't have a clear picture of the whole thing after running my first failed tests. I decided to setup a site dedicated just to my Django project, you can use name based or IP based virtual hosts on Apache, and I want to access it from the root: http://example.com/. Also, I store all my Python related stuff in /home/alexis/python-work hence the project will be at /home/alexis/python-work/project and its … -
Selecionando por padrão o site corrente num ManyToManyField(Site, ...)
Quem utiliza a django.contrib.sites do Django pode gostar desta dica. Para quem não conhece, a aplicação sites permite você compartilhar um model com vários outros sites (ou projetos), podendo ter conteúdos iguais (ou em parte) sem redundância, utilizando uma mesma tabela. No Django 1.0, quando há apenas uma opção para escolha numa ManyToManyField, ela não é selecionada por padrão quando o campo é obrigatório. Antes da versão 1.0 isso não era problema, mas me incomodava o fato de que quando eu tinha mais de uma entrada no model Site, eu deveria escolher o site ao qual eu estava acessando. Seria interessante pré-selecionar por padrão o site corrente, quando o mesmo é obrigatório e você está acessando sua interface administrativa. Quando tentei pela última vez fazer isso não obtive sucesso. A idéia era passar para o parâmetro default do ManyToManyField o valor de Site.objects.get_current(). Sem sucesso, não dei mais atenção a isso, mas com o Django 1.0, a cada vez que iria publicar algo neste blog, por exemplo, eu deveria selecionar o site semente.taurinus.org, mesmo sendo o único, a cada texto publicado. Como todo bom preguiçoso, isso me frustava pois sempre esquecia de marcar o site para ser publicado, causando um … -
The Django Debug Un-Toolbar
When I caught wind of the Django Debug Toolbar a couple weeks ago, I was really excited to put it to use. However, when i wired it up, I discovered that it wasn't going to play nicely with MooTools since it is based on jQuery. Not being a javascript expert, I am assuming there is some global namespace collisions in how the two libraries use shortcut functions like the dollar sign selectors (e.g. $('some-dom-element')). Anyway, the more I thought about it, I figured it probably best to not manipulate the DOM at all. In some discussion with others, it was determined a very useful adaptation to the project would be to serialize off all the data collected in the middleware on the server and set a cookie to a special path so that it could be retrieved via something like a bookmarklet. So that's what I did. I forked the Django Debug Toolbar project and renamed it to Django Debug Un-Toolbar, real original, I know. While I don't expect it to be perfect yet (I spent about 2 hours this evening making sweeping and hurried changes to the code base), it does work as intended. There are a number of … -
Shifting Bits Makes Progress
I have done a little more hacking on Shifting Bits this weekend and have launched a beta version of it: http://beta.paltman.com In order to keep crawlers and indexers out of it and not leaving it up to trusting that they obey a good robots.txt instruction set, I have put some simple low-tech authentication on it (HTTP Basic). The username and password for this beta site is paltman/test. I'd love to hear any feedback about what's there. This was mainly a test to get my environment where it needed to be to host the blog as well as to exercise my Wordpress import tool somewhere other than my laptop. -
The Django Debug Un-Toolbar
When I caught wind of the Django Debug Toolbar a couple weeks ago, I was really excited to put it to use. However, when i wired it up, I discovered that it wasn't going to play nicely with MooTools since it is based on jQuery. Not being a javascript expert, I am assuming there is some global namespace collisions in how the two libraries use shortcut functions like the dollar sign selectors (e.g. $('some-dom-element')). Anyway, the more I thought about it, I figured it probably best to not manipulate the DOM at all. In some discussion with others, it was determined a very useful adaptation to the project would be to serialize off all the data collected in the middleware on the server and set a cookie to a special path so that it could be retrieved via something like a bookmarklet. So that's what I did. I forked the Django Debug Toolbar project and renamed it to Django Debug Un-Toolbar, real original, I know. While I don't expect it to be perfect yet (I spent about 2 hours this evening making sweeping and hurried changes to the code base), it does work as intended. There are a number of … -
Shifting Bits Makes Progress
I have done a little more hacking on Shifting Bits this weekend and have launched a beta version of it: http://beta.paltman.com In order to keep crawlers and indexers out of it and not leaving it up to trusting that they obey a good robots.txt instruction set, I have put some simple low-tech authentication on it (HTTP Basic). The username and password for this beta site is paltman/test. I'd love to hear any feedback about what's there. This was mainly a test to get my environment where it needed to be to host the blog as well as to exercise my Wordpress import tool somewhere other than my laptop. -
HTTP 200 testing Django applications with Facebook
I've been writing a simple Django application for Facebook these days. I'm really enjoying how clean Django's code is and its very well thought classes and methods. It really makes web development faster. I started with some simple HTML running locally on Django's development server and then updated my templates to output FBML based on the value of a variable I called IN_FACEBOOK and inserted into my settings.py. After adding PyFacebook to talk to Facebook's API from Python I configured my new application according to Facebook's instructions. Finally I changed my router's port forwarding settings to allow Facebook to see my home server's public IP, which is dynamic and provided by my ISP. Everything ran ok up to this point and then I started noticing that after each change on my application's code Facebook returned a blank page with an HTTP 200 message. It seemed like a connection issue and I moved the application to my real server, which has a fixed public IP, but the problem persisted. After every code change Facebook returned a blank page with the HTTP 200 message. I needed to refresh the browser three or more times to get my application loading. My application is … -
HTTP 200 testing Django applications with Facebook
I've been writing a simple Django application for Facebook these days. I'm really enjoying how clean Django's code is and its very well thought classes and methods. It really makes web development faster. I started with some simple HTML running locally on Django's development server and then updated my templates to output FBML based on the value of a variable I called IN_FACEBOOK and inserted into my settings.py. After adding PyFacebook to talk to Facebook's API from Python I configured my new application according to Facebook's instructions. Finally I changed my router's port forwarding settings to allow Facebook to see my home server's public IP, which is dynamic and provided by my ISP. Everything ran ok up to this point and then I started noticing that after each change on my application's code Facebook returned a blank page with an HTTP 200 message. It seemed like a connection issue and I moved the application to my real server, which has a fixed public IP, but the problem persisted. After every code change Facebook returned a blank page with the HTTP 200 message. I needed to refresh the browser three or more times to get my application loading. My application is … -
Getting Django up and running on Centos 5.2 with Apache(mod_python) and MySQL
This is partly for my reference (doing it the second time just now and I forgot everything!) but hopefully it will be helpful for others too. Disclaimer; I am by no means a Linux expert. This is just how I got it working... If there is a better, easier or wiser way please let me know! Let's assume you have Yum installed (I didn't on my VPS - but my provider installed it for me). First, make sure you are up to date; $ yum update These are the packages I installed (httpd and python are already installed); mod_python (Apache uses this to run Python) mysql-server mysql-devel (easy_setup needs this) python-devel (easy_setup needs this) python-setuptools (so we have easy_setup) gcc (easy_setup needs this) $ yum install mod_python mysql-server mysql-devel python python-devel python-setuptools gcc At this point I would have added MySQL-python to this list, however the default repo's I have only give me version 1.2.1 and Django needs 1.2.1p2 or later. The easiest way I found to get this was with easy_install but it requires a few other packages as mentioned above. After that is finished you can go on to install MySQL-python by doing this; $ /usr/bin/easy_install MySQL-python This … -
Hacking Django forms for CSS flexibility
The default output of the Django forms (former newforms) module is not very CSS friendly. With a few simple adjustments, you can make your web designer colleague happy. This patch will add three classes on the parent HTML element of the rendering of each form field (the tr, li or p tag depending on your rendering mode): The type of the form field. (Examples: CharField, ModelChoiceField) The type of the widget. (Examples: TextInput, SelectInput) Is the form field optional or required: Optional or Required Now a required DateField will render, using the as_table rendering, as: <tr class="DateField TextInput Required"> <th> <label for="id_date">Date</label> </th> <td> <input type="text" name="date" id="id_date" /> </td> </tr> Example uses A couple of example use cases where my patch will help you out: Special styling of required fields possible. Easier to add a date picker by JavaScript. Special styling of checkboxes (styling input elements to width: 100% also affects those). Download the patch Patch against forms/forms.py in Django 1.0: Download - View How to patch your newly downloaded Django-1.0.tar.gz For those of you not quite familiar with working with patches: $ wget http://www.hacktheplanet.dk/export/HEAD/misc/forms.py.patch $ wget http://www.djangoproject.com/download/1.0/tarball/ $ tar xvfz Django-1.0.tar.gz $ patch -d Django-1.0/django/forms/ < forms.py.patch -
Hacking Django forms for CSS flexibility
The default output of the Django forms (former newforms) module is not very CSS friendly. With a few simple adjustments, you can make your web designer colleague happy. This patch will add three classes on the parent HTML element of the rendering of each form field (the tr, li or p tag depending on your rendering mode): The type of the form field. (Examples: CharField, ModelChoiceField) The type of the widget. (Examples: TextInput, SelectInput) Is the form field optional or required: Optional or Required Now a required DateField will render, using the as_table rendering, as: 1 <tr class="DateField TextInput Required"> 2 <th> 3 <label for="id_date">Date</label> 4 </th> 5 <td> 6 <input type="text" name="date" id="id_date" /> 7 </td> 8 </tr> Example uses A couple of example use cases where my patch will help you out: Special styling of required fields possible. Easier to add a date picker by JavaScript. Special styling of checkboxes (styling input elements to width: 100% also affects those). Download the patch Patch against forms/forms.py in Django 1.0: Download - View How to patch your newly downloaded Django-1.0.tar.gz For those of you not quite familiar with working with patches: $ wget http://www.hacktheplanet.dk/export/HEAD/misc/forms.py.patch $ wget http://www.djangoproject.com/download/1.0/tarball/ $ tar xvfz … -
Django ModelForm - replacement for form_for_model & form_for_instance
Each commit, Django gets more amazing.I wrote about newforms library before. The library was a big step in Django form displaying and validating.The first approach was to use forms.form_for_model() and forms.form_for_instance() respectively.As Django programmer I found this a little confusing. Both were similar. The only difference was that form_for_instance() took an object instance for saving -
Custom Actions In Django Admin Object Editor
I’ve seen many posts asking for the simplest feature in Django admin… the ability to add custom actions next to History and View On Site in the Django admin form. The page where the actual object is edited, not the list pages. Imagine adding actions like: Edit Next Item Edit Previous Item Send Thank You Email Export [...] -
Warsztaty Django
Marcin Kaszyński organizuje w Warszawie warsztaty Django. Będzie można na nich dowiedzieć się od podstaw jak działa Django i co w nim siedzi. Warsztaty są skierowane dla ludzi niezorientowanych w tej technologi, ale również dla tych, co robią już pierwsze kroki. Jedyne wymaganie, to... -
Django -> Plone: Portlets, Viewlets, Zcatalog, Aspects
[Another in a series of posts about moving from Django to Plone. I'm a Plone/Zope newbie writing about my bafflements and enlightenments as they happen. Some of my opinions are certainly wrong. I'm writing this in the expectation that the history of my meandering learning path may be useful, or at least entertaining, to future Plone [...] -
Django browser for Redmine database
Do you know redmine ? This is, to my knowledge, the best project manager you could ever find out there. I like to describe it as ‘trac done well‘. It has only one, big, ugly, fat inconvenient for me : it is written on top of ruby on rails. I could tell you how slow [...] -
Django JQuery Autocomplete for Model Selection
I’ve been working on a very cool snippet, inspired by Django Autocomplete Widget : http://www.djangosnippets.org/snippets/233/ The idea is to create a Widget containing the client side code (I mean html + jquery), and a custom field called ModelAutocompleteField that accepts any model as a contructor parameter and its clean method returns the instance selected by [...] -
Django Diário is now compatible with Django 1.0
Diário weblog application for Django is now compatible with Django 1.0. After release candidate 1, Diário was broken because of comments refactoring. Apparently, everything works fine. Special thanks to Rodrigo Pimentel to open an issue for this and for sending patch. Now is close the eternal issues. :-P -
Zapowiedź Django 1.1
Pojawiła się już informacja o przyszłej wersji Django. Nie wyjdzie ono szybko, bo dopiero w marcu przyszłego roku. Terminy nowej wersji: Version1.1Roadmap Lista nowych rzeczy.Version1.1Features Ma pojawić się sporo nowości. Można zauważyć, że większość rzeczy, które mają się... -
django and some plone
There seems to be some rumblings on the Plone front for us currently. For our main stable of development however, we have moved away although not totally from Plone to django. The main reason here is that for Plone deals to be feasible for us, we either have to:1. Lock requirements down really tight so that the juniors can have a go at it .... or 2. Sic some seniors at it.In my own experience, it seems that while Plone can be easy if worked within a tight parameter, try swaying a bit out of those parameters, when you have to peer under the hood and you are in a world of pain. It's hard to gain leverage using Plone this way. django on the hand has been actually quite young developer friendly for us and they end up being actually more productive compared to when they are forced to make some funky changes in Plone. Most of the business applications that we build require a light framework and is normally built from ground up. This means that Plone is sometimes an overkill for these apps which is a shame because Plone almost always appear like a good fit in … -
Aplikacja napisana w Django zajęła pierwsze miejsce!
Aplikacja napisana w Django zajęła pierwsze miejsce w konkursie Hackfest. Pierwsza trójka wygląda następująco: 1. Megakozak - 18,99 % głosów 2. True Solutions (muu.sk*) - 15,86 % głosów 3. Speedsoft (Nastrojometr) - 13,9 % głosów Twórcom gratulujemy wygranej i życzymy dalszych... -
MVC en .Net – Primeras Impresiones
Bueno hace mucho tiempo que queria iniciar un blog y que mejor manera de iniciarlo que hablando de nuestro nunca bien ponderado .Net. Nunca he sido fanático ni seguidor de las tecnologías de Microsoft pero tampoco las satanizo. Luego de haber desarrollado algunas aplicaciones, tratando de aplicar algunas buenas prácticas en el desarrollo, siento que [...] -
10. Finishing the Code-Sharing Application
This is part 10 of a series of posts on James Bennett's excellent Practical Django Projects. The table of contents and explanation can be found here Finally, we're on the home stretch. This chapter builds on our knowledge of templates and also gives a few new examples of custom template tags, so without further ado lets finish the app. On p188 you need to modify the save method of the bookmark