Puede parecer una pregunta ya respondida, en realidad aquí tienes el mismo problema (más o menos) que tuve yo. Mi problema es que es solo un truco, una línea, sin explicación (y aún así es diferente, pero la solución dada funciona, y eso es parte de mi problema). Aquí está la estructura de mi proyecto, simplificada:
manage.py compfactu/---settings.py |--__init__.py |--core/--------__init__.py |-apps.py Así es como agregué mi aplicación en INSTALLED_APPS :
aplicaciones.py
from django.apps import AppConfig class CoreConfig(AppConfig): name = 'core'configuración.py
INSTALLED_APPS = [ ... #compfactu modules 'compfactu.core.apps.CoreConfig', ]Mientras leo la documentación de django 1.11, y cito:
Las nuevas aplicaciones deben evitar default_app_config. En su lugar, deberían requerir que la ruta punteada a la subclase AppConfig apropiada se configure explícitamente en INSTALLED_APPS.
Bueno, es una aplicación nueva, así que debería hacer eso: pero recibo un error. Y no es un problema de pythonpath, porque acabo de abrir un shell de python y puedo hacer from compfactu.core.apps import CoreConfig sin problema (imprima el sys.path también, todo está bien).
Pero tengo este error, aquí hay un seguimiento completo:
Traceback (most recent call last): File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/apps/config.py", line 147, in create app_module = import_module(app_name) File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 986, in _gcd_import File "<frozen importlib._bootstrap>", line 969, in _find_and_load File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked ImportError: No module named 'core' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/utils/autoreload.py", line 228, in wrapper fn(*args, **kwargs) File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/core/management/commands/runserver.py", line 117, in inner_run autoreload.raise_last_exception() File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/utils/autoreload.py", line 251, in raise_last_exception six.reraise(*_exception) File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/utils/six.py", line 685, in reraise raise value.with_traceback(tb) File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/utils/autoreload.py", line 228, in wrapper fn(*args, **kwargs) File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/__init__.py", line 27, in setup apps.populate(settings.INSTALLED_APPS) File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/apps/registry.py", line 85, in populate app_config = AppConfig.create(entry) File "/home/jbjaillet/Projets/venvcompfactu/lib/python3.5/site-packages/django/apps/config.py", line 151, in create app_name, mod_path, cls_name, django.core.exceptions.ImproperlyConfigured: Cannot import 'core'. Check that 'compfactu.core.apps.CoreConfig.name' is correct.Y a partir de ahí, todos los archivos y clases han sido generados por django (manage.py startapp). Y cuando realmente hago lo que se dice en la pregunta que vinculé arriba, hago lo siguiente:
INSTALLED_APPS = [ ... #compfactu modules 'compfactu.core', ] funciona ! ¡Y no entiendo ese punto! Al leer el documento (la parte que acabo de citar), NO DEBERÍA funcionar (observando que no tengo un default_app_config en mi __init__.py .
Entonces, como la pregunta donde encontré el "truco" pero sin explicación, estoy aquí preguntando por qué funciona de esta manera cuando no debería, y por qué la solución en el documento oficial no funciona.
Gracias de antemano por su tiempo.
De acuerdo con la documentación, AppConfig.name es una ruta completa de python a la aplicación.
AppConfig.nombre
Ruta completa de Python a la aplicación, por ejemplo, 'django.contrib.admin' .
Este atributo define a qué aplicación se aplica la configuración. Debe establecerse en todas las subclases de AppConfig .
Debe ser único en un proyecto de Django.
https://docs.djangoproject.com/en/2.2/ref/applications/#django.apps.AppConfig.name
Prueba esto:
class CoreConfig(AppConfig): name = 'compfactu.core'