Mostrar numero de version en django
Escrito el Noviembre 3, 2009 a las 8:31 AM por Camilo Nova
En AxiaCore utilizamos subversion para llevar el control de versiones de los proyectos, junto a nuestro esquema de desarrollo ágil manejamos ciclos cortos de lanzamiento de nuevas funcionalidades, por eso para nosotros es necesario conocer el numero de revisión del SVN y publicarlo en un lugar fácilmente accesible para los usuarios, de tal forma que rápidamente nos puedan indicar la versión que están utilizando.
La aproximación inicial es tener un parámetro donde se indique un numero de versión de la aplicación, pero esta fue rápidamente descartada porque no es flexible y se tendría que cambiar la versión manualmente en cada nuevo cambio, así que decidimos manejar el numero de revisión del repositorio como el indicador de la versión. Ahora bien, se necesita una manera automática de obtener dicho numero y publicarlo en una plantilla HTML para verlo en la interfaz de usuario.
Lo resolvimos así:
Partimos de la plantilla donde básicamente django nos permite lo siguiente:
1 2 | {% load version_tag %}
<p>Version: {% get_version %}</p> |
Entonces cargamos un ‘custom tag’ que nos retorna la versión actual de la aplicación, el cual es:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #! /usr/bin/env python # -*- coding: utf8 -*- import subprocess from django import template from django.core.cache import cache register = template.Library() @register.simple_tag def get_version(): """ Retorna el numero de version para la aplicacion y lo almacena en cache para evitar ser llamado multiples veces y mejorar el rendimiento de la aplicacion. """ if not cache.get('version'): comando = 'svn info | grep Rev | head -1' try: proc = subprocess.Popen(comando, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) line = proc.communicate()[0] version = line[line.find(" ")+1:].rstrip("\n") except: version = '---' tiempo = 24 * 60 * 60 #Tiempo en segundos de un dia cache.set('version', version, tiempo) return cache.get('version') |
Este archivo (version_tag.py) debe estar dentro de una carpeta llamada ‘templatetags’ de alguna aplicación del proyecto.
Lo interesante de esta solución es:
- Obtiene el numero de versión por el comando ’svn info’
- Reduce las llamadas al comando ubicando la información en cache durante un día
- Es totalmente desacoplado del proyecto y se puede reutilizar fácilmente
- Se puede adaptar para otros sistemas de control de versiones
Que les parece?

Noviembre 4th, 2009 at 8:23 PM
Huy, tenia pensado realizarlo, pero ahora solo sera plugearlo
muchas gracias muy bueno. con respecto al comentario de la linea 13, no seria, aumentar el rendimiento?
Noviembre 4th, 2009 at 9:56 PM
jeje si
ya hize la correcion. Gracias