python django django-1.7

python - Django: AppRegistryNotReady()



django-1.7 (4)

Python: 2.7; Django: 1.7; Mac 10.9.4

Estoy siguiendo el tutorial de Tango con Django

En el Capítulo 5, el tutorial enseña cómo crear un script de población, que puede crear automáticamente algunos datos para la base de datos para facilitar el desarrollo.

Creé un populate_rango.py en el mismo nivel de manage.py.

Aquí está el populate_rango.py:

import os def populate(): python_cat = add_cat(''Python'') add_page( cat=python_cat, title="Official Python Tutorial", url="http://docs.python.org/2/tutorial/" ) add_page( cat=python_cat, title="How to Think like a Computer Scientist", url="http://www.greenteapress.com/thinkpython/" ) add_page( cat=python_cat, title="Learn Python in 10 Minutes", url="http://www.korokithakis.net/tutorials/python/" ) django_cat = add_cat("Django") add_page( cat=django_cat, title="Official Django Tutorial", url="https://docs.djangoproject.com/en/1.5/intro/tutorial01/" ) add_page( cat=django_cat, title="Django Rocks", url="http://www.djangorocks.com/" ) add_page( cat=django_cat, title="How to Tango with Django", url="http://www.tangowithdjango.com/" ) frame_cat = add_cat("Other Frameworks") add_page( cat=frame_cat, title="Bottle", url="http://bottlepy.org/docs/dev/" ) add_page( cat=frame_cat, title="Flask", url="http://flask.pocoo.org" ) for c in Category.objects.all(): for p in Page.objects.filter(category=c): print "- {0} - {1}".format(str(c), str(p)) def add_page(cat, title, url, views=0): p = Page.objects.get_or_create(category=cat, title=title, url=url, views=views)[0] return p def add_cat(name): c = Category.objects.get_or_create(name=name)[0] return c if __name__ == ''__main__'': print "Starting Rango population script..." os.environ.setdefault(''DJANGO_SETTINGS_MODULE'', ''tangle.settings'') from rango.models import Category, Page populate()

Luego ejecuto python populate_rango.py en la terminal en el nivel de manage.py, se genera AppRegistryNotReady ():

django.core.exceptions.AppRegistryNotReady

Luego busqué en Google, encontré algo como this :

Standalone scripts¶ If you’re using Django in a plain Python script — rather than a management command — and you rely on the DJANGO_SETTINGS_MODULE environment variable, you must now explicitly initialize Django at the beginning of your script with: >>> import django >>> django.setup() Otherwise, you will hit an AppRegistryNotReady exception.

Y todavía no tengo idea de qué debería hacer, ¿puede ayudar alguien? ¡¡¡Gracias!!!


Acabo de tropezar con el mismo problema en mi servidor de desarrollo local.

Después de introducir un código cambiado, se arrojó el error. El problema aquí obviamente no tiene nada que ver con wsgi, así que traté de ejecutar manage.py

Un simple: python manage.py revela la verdadera causa del error.

En mi caso, una importación olvidada de una aplicación Django externa.

Tal vez esto ayude a alguien más a salir.


Encontré esta solución, agregando

from django.core.wsgi import get_wsgi_application application = get_wsgi_application()

después

os.environ.setdefault ...


Si está utilizando sus aplicaciones de proyectos django en scripts independientes, en otras palabras, sin usar manage.py , manage.py debe llamar manualmente a django.setup() ; esto configuraría el registro y, lo que es más importante, completará el registro de aplicaciones .

Cita de documentos de proceso de inicialización :

preparar()

Esta función se llama automáticamente:

  • Cuando se ejecuta un servidor HTTP a través del soporte WSGI de Django.

  • Al invocar un comando de administración.

Debe llamarse explícitamente en otros casos, por ejemplo, en scripts de Python sin formato.

En su caso, debe llamar a setup() manualmente:

if __name__ == ''__main__'': print "Starting Rango population script..." os.environ.setdefault(''DJANGO_SETTINGS_MODULE'', ''tangle.settings'') import django django.setup() populate()

Además, este problema se describe en detalle en la sección Troubleshooting de Troubleshooting .


También encontré este problema usando Django 1.7 en un servidor Apache. Al cambiar la wsgi gestor de wsgi en mi archivo wsgi.py solucionó el problema:

import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler()

Esto fue sugerido here por el usuario ''jezdez''.