Thursday, August 23rd, 2012

A Django filter to be more DRY

In Django one repetitive task which is done in your templates over and over again is normally the following:

<a href="{{object.get_absolute_url}}">{{object}}</a>

With my new template filter, which I believe should be in Django by default, will allow something DRY like this:

{{object|link}}

Isn't that so much easier than typing in the entire A tag for each link you want to place to an object in your code? The best part, is that this will work on ForeignKeys as well.

{{object.article|link}}

First, you will need to choose an app which will contain this template filter, inside the app create a new directory called templatetags, and inside that create a __init__.py to turn it into a new Python package. Next create a new Python file, name it something you will use to load it into your templates. In this file enter in the following code:

from django import template
from django.template.defaultfilters import escape
from django.utils.safestring import mark_safe

register = template.Library()

@register.filter
def link(value):
    return mark_safe('<a href="%s">%s</a>' % (escape(value.get_absolute_url()), escape(value)))

There you have it, now you can easily link to objects from within your template, and still be DRY. Enjoy!

About Me

My Photo
Names Kevin, hugely into UNIX technologies, not just Linux. I've dabbled with the demons, played with the Sun, and now with the Penguins.




Kevin Veroneau Consulting Services
Do you require the services of a Django contractor? Do you need both a website and hosting services? Perhaps I can help.

This Month

If you like what you read, please consider donating to help with hosting costs, and to fund future books to review.

Python Powered | © 2012-2014 Kevin Veroneau