2010-02-03 12 views
24

Tiene problemas para hacer que los comandos personalizados de django funcionen.comando personalizado django no encontrado

De Django documetation, han colocado

application/ 
    manage.py 
    blog/ 
     __init__.py 
     models.py 
     management/ 
      __init__.py 
      commands/ 
       __init__.py 
       myapp_task.py 
     views.py 

contenido myapp_task.py es

from django.core.management.base import NoArgsCommand 

class Command(NoArgsCommand): 
    def handle_noargs(self, **options): 
     print 'Doing task...' 
     # invoke the functions you need to run on your project here 
     print 'Done' 

cuando corrió

python manage.py myapp_task 

error

Unknown command: 'myapp_task' 
0 conseguir

Respuesta

35

La estructura del directorio en su respuesta es un poco ambigua; al colocar los archivos de la siguiente manera Django debería ser capaz de encontrar su comando:

project/ # in your question this would be 'application' 
    manage.py 
    blog/ 
     __init__.py 
     models.py 
     management/ 
      __init__.py 
      commands/ 
       __init__.py 
       myapp_task.py 
     views.py 

Además, será necesario que habilite su aplicación en su settings.py:

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.admin', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'blog', # <= your app here ... 
) 
+0

la estructura de archivos es correcta, acaba de ser desordenado pegar aquí – bocca

+0

que aparece en las aplicaciones instaladas en los entornos – bocca

+0

Bocca: ¿Se puede fijar la sangría en su lista de archivos en el post original, a continuación, ? La estructura real es muy importante en este caso. –

0

Creo que los comandos/necesita estar dentro de la gestión/directorio.

+0

comandos directorio es en la gestión – bocca

3

que tenían el mismo problema. La razón fue que la raíz del proyecto no estaba en mi $ PYTHONPATH. La solución en este caso es escribir (en una máquina Linux) algo así como

PYTHONPATH=./project python manage.py myapp_task 
0

Si el proyecto es el byte-compilados, django.core.management.find_commands() sólo se buscarán los archivos .py. Si sus comandos personalizados están en archivos .pyc, tienes que parchear django/core/gestión/comandos/__ init__.py con el parche a https://code.djangoproject.com/ticket/19085

-1

Es porque el init .pyc no se crea automáticamente dentro " carpeta de administración "y" comandos ". Copie your_app/__init__.py y your_app/__init__.pyc y péguelo en la carpeta de administración/y comandos /.

+0

¿No es este un truco horrible? ¿Por qué habría que molestarse con si existen .pyc? ¿No es el trabajo de python2 | 3 compilar, y no debe la introspección del tiempo de ejecución ni lo que django-admin hacer para encontrar los comandos ser invariante para saber si hay .pyc? – Herbert