para ampliar aún más el excelente respuesta de @Mario César, me gustaría ofrecer una versión moderna de la inicial de su código de 2011 adaptada para Django 1.8+:
Antes de Django 1.8, los comandos de administración se basaron en el módulo optparse [...] Ahora que los comandos de administración usan argparse de análisis de argumentos, todos los argumentos se pasan en las opciones por defecto ** [. ..]
Source
Además, me gustaría señalar que el comando específico runserver
que fue elegida en la pregunta tiene una ligera complicación por lo que es tanto un ejemplo bueno y malo.
Mal ejemplo, porque la complicación es que el comando también es anulado por Django. De hecho, Django utiliza el mismo método propuesto por Mario: Django lo anula en la aplicación staticfiles (ver Django code on github) para ofrecer las opciones adicionales de archivos estáticos.
Por lo tanto, es mejor anular el comando de la aplicación staticfiles en lugar del comando central, si se usa estático. Esto también responde al comentario de @ ts_pati sobre por qué hay un problema. El código de Django de staticfiles es el buen ejemplo de cómo anularlo, pero esta vez la importación de los staticfiles con el fin de no perder esa funcionalidad:
from django.contrib.staticfiles.management.commands.runserver import Command as StaticfilesRunserverCommand
class Command(StaticfilesRunserverCommand):
help = "Starts a lightweight Web server for development, serves static files and does some custom fancy stuff."
def add_arguments(self, parser):
super(Command, self).add_arguments(parser)
parser.add_argument('--my-custom-argument', action="...", dest='my_custom_handler', default=True, help='do some stuff in fancy ways')
def get_handler(self, *args, **options):
"""
My fancy stuff function.
"""
handler = super(Command, self).get_handler(*args, **options)
my_custom_handler = options.get('my_custom_handler', True)
# do stuff here
return handler
EDIT: También me gustaría añadir el orden de esto en INSTALLED_APPS
es aparentemente importante y tiene que ser anterior al django.contrib.staticfiles
.
¿Tuvo algún problema con estática usando este comando? No sé por qué, pero incluso con la función inner_run vacía (solo con call_fun inner_run), statics no se está cargando. Tengo 404 para todos. –
@ts_pati mira mi respuesta a continuación sobre lo que está pasando con los archivos estáticos. – Wtower
Nota de [django 1.9 documentos] (https://docs.djangoproject.com/en/1.9/ref/settings/): Cuando varias aplicaciones proporcionan diferentes versiones del mismo recurso (plantilla, archivo estático, comando de gestión, traducción), la aplicación que figura primero en INSTALLED_APPS tiene prioridad. Editar: @Wtower menciona esto en su respuesta a continuación – msnider