Es realmente sencillo utilizar javascript o CSS propio en el sitio de administración de nuestro proyecto Django. Para ello podemos añadir en nuestros ModelAdmin los archivos JS o CSS que necesitemos utilizando la clase Media en los modelos de administración. Aquí tenemos un ejemplo:
from django.db import models
from django.contrib import admin
from myapp.hotels.models import Modelo
class ModeloAdmin(admin.ModelAdmin):
...
class Media:
css = { "all": ("mis_estilos.css",) }
js = ("/media/javascript/mi_javascript.js",)
admin.site.register(Modelo, ModeloAdmin)
Como el admin de Django utiliza jQuery podemos utilizar la función $(document).ready() de jQuery para que nuestro javascript se ejecute cuando el DOM se haya terminado de cargar. De esta forma nuestro archivo mi_javascript.js quedaría de la siguiente manera:
(function($) {
$(document).ready(function($) {
// aquí podemos utilizar jquery / javascript...
alert('¡Ha funcionado!');
});
})(django.jQuery);
Publicado por Antonio Melé el Jueves 13 d Octubre d 2011 | 10 comentarios | Categorías: admin, javascript, media
Al personalizar alguna plantilla del sistema de administración podemos querer usar jQuery. Como el admin de Django ya hace uso de jQuery podemos utilizarlo directamente sin necesidad de incluir la propia librería. Pero enseguida nos daremos cuenta de que no podemos utilizar el alias $ ya que el admin utiliza la opción noConflict de jQuery. El alias que define el sistema de administración para usar jQuery es django.jQuery.
Por ello deberemos incluir el código jQuery que queramos ejecutar utilizando el alias django.jQuery como en el siguiente ejemplo:
{% block extrahead %}
{{ block.super }}
<script type="text/javascript">
(function($) {
$(document).ready(function($) {
// código jquery para ejecutar en cuanto se haya cargado la página
});
})(django.jQuery);
</script>
{% endblock %}
Publicado por Antonio Melé el Domingo 13 d Febrero d 2011 | 3 comentarios | Categorías: admin, javascript, trucos
Muchas veces nos gustaría crear comandos propios que puedan ejecutarse mediante django-admin.py ó el manage.py de nuestro proyecto. Django permite crear comandos de administración específicos para cada aplicación de nuestro proyecto.
Para programar comandos de una aplicación, dentro de la carpeta de la aplicación debemos crear un directorio llamado management y dentro de éste otro llamado commands. Obviamente, para que funcionen los comandos, debemos asegurarnos de que nuestra aplicación está incluída en el setting INSTALLED_APPS. También debemos incluir un archivo __init__.py vacío en cada directorio que hemos creado (para que el directorio se interprete como un módulo de Python). Dentro de commands incluiremos un archivo .py por cada comando que deseemos utilizar para nuestra aplicación, quedando finalmente una estructura como esta:
mi_aplicacion/
__init__.py
models.py
management/
__init__.py
commands/
__init__.py
un_comando.py
otro_comando.py
views.py
El nombre que tenga cada archivo .py dentro de commands será el nombre del comando. Si por ejemplo creamos un archivo enviar.py, nuestro código se ejecutará cuando se utilice el comando manage.py enviar. Dentro de cada archivo de comando tenemos que crear una clase Command que herede alguna de las clases básicas de comandos.
Todas las clases básicas de comandos heredan de django.core.management.base.BaseCommand. Tu comando puede heredar directamente la clase BaseCommand pero hay otras clases de comandos que permiten crear distintos tipos de comando de una forma más sencilla:
Facilita la creación de comandos de administración que reciben una lista de nombres de aplicaciones Django como argumento y que hacen algo con cada uno de los nombres de las aplicaciones. El comando sqlall de Django funciona de esta manera.
Hace lo mismo que AppCommand pero la lista de argumentos que recibe puede ser cualquier cosa y no sólo nombres de aplicaciones. El comando startproject utiliza esto para recibir como parámetro el nombre o nombres de proyectos a crear.
Es lo más útil para crear comandos sencillos que no reciben ningún argumento. Un ejemplo de comando basado en NoArgsCommand es el conocido syncdb que utilizamos para sincronizar nuestros modelos con la base de datos.
Vamos a ver cómo crear un comando sencillo sin entrada de parámetros. Para ello utilizamos NoArgsCommand:
# -*- encoding: utf-8 -*-
from django.core.management.base import NoArgsCommand
class Command(NoArgsCommand):
help = "Breve descripción de lo que hace el comando."
def handle_noargs(self, **options):
# aquí va el código de mi comando
print 'Comando ejecutado'
Si necesitamos automatizar nuestro comando para que se ejecute automáticamente cada un intervalo de tiempo determinado podemos utilizar django-chronograph, del que ya hablamos anteriormente en este blog.
Puedes ver ejemplos de comandos que implementa Django en django.core.management.commands. También te será util leer el gran artículo de B-List sobre comandos de administración.
Publicado por Antonio Melé el Martes 19 d Mayo d 2009 | 4 comentarios | Categorías: admin, comandos, tutorial
Django-chronograph es una aplicación que permite programar la ejecución de tareas automáticas de manage.py utilizando cron. Permite especificar las tareas a realizar y el intervalo de tiempo en el que se deben repetir mediante el sitio de administración de Django. Esto es muy útil para automatizar tareas repetitivas de nuestro proyecto como pueden ser enviar un e-mail semanal automático a todos los usuarios ó eliminar diariamente cuentas de usuarios inactivos. Django-chronograph también almacena un listado de logs visible desde el sitio de administración que nos permite comprobar los resultados de las tareas ejecutadas.
Para instalar django-chronograph basta con seguir los siguientes pasos:
Descarga python-dateutil si aún no lo tienes. Es necesario para django-chronograph.
Descarga la última versión de django-chronograph del repositorio mediante svn:
svn checkout http://django-chronograph.googlecode.com/svn/trunk/ django-chronograph-read-only
Añade la aplicación chronograph al setting INSTALLED_APPS y la siguiente URL a tu configuración de URLs en urls.py:
url(r'^admin/chronograph/job/(?P<pk>\d+)/run/$', 'chronograph.views.job_run', name="admin_chronograph_job_run")
Después ejecuta el comando manage.py syncdb para que se creen las tablas necesarias en la base de datos.
Añade la siguiente línea a tu crontab especificando la ruta en la que se encuentra el archivo manage.py de tu proyecto. Para editar las tareas cron utiliza el comando crontab -e
* * * * * python /path/a/tu/proyecto/manage.py cron
Después podrás gestionar tus tareas automáticas desde el sitio de administración de Django.

Publicado por Antonio Melé el Jueves 9 d Abril d 2009 | 1 comentario | Categorías: admin, aplicaciones, pluggables
Suscríbete a nuestro feed RSS y al feed de la comunidad para estar al tanto de todo lo que ocurre entorno a Django.
Tú también puedes escribir en éste blog. Para hacerlo basta con que nos digas sobre qué quieres escribir un artículo relacionado con Django.
Utilizar un formulario para modificar 2 modelos
Descubriendo objetos similares por sus etiquetas