/ / ImportError após mover o aplicativo para a pasta aninhada - django

ImportError após mover o aplicativo para a pasta aninhada - django

Meu aplicativo estava funcionando bem quando eu queria ver se conseguia organizar meu projeto de uma maneira melhor. Eu li este tutorial na estruturação de um projeto django.

Antes da estrutura do meu projeto era a seguinte:

  • camucamu
    • livros
      • admin.py
      • models.py
      • views.py
      • __init__.py
    • estático
    • modelos
    • urls.py
    • views.py
    • settings.py
    • wsgi.py
    • __init__.py

O que eu queria fazer era mover o aplicativo de livros para uma pasta de aplicativos. Assim, fiz isso e alterei a estrutura do projeto para o seguinte:

  • camucamu
    • aplicativos
      • livros
        • admin.py
        • models.py
        • views.py
        • __init__.py
    • estático
    • modelos
    • urls.py
    • views.py
    • settings.py
    • wsgi.py
    • __init__.py

Alterei as importações em views.py e admin.py de books.models para apps.books.models. Eu também mudei INSTALLED_APPS em settings.py, de livros para apps.books.

Quando tentei executar o syncdb, recebo o seguinte erro:

raise ImproperlyConfigured("ImportError %s: %s" % (app, e.args[0]))
django.core.exceptions.ImproperlyConfigured: ImportError apps.books: No module named apps.books

O que estou bagunçando aqui para que ele não consiga mais encontrar meu aplicativo?

Respostas:

4 para resposta № 1

A pasta de aplicativos não possui um __init__.py para que ele não possa ser reconhecido como um módulo python


1 para resposta № 2

Eu recebi o mesmo erro, seguindo o mesmo guia, pois o último ponto da lista a seguir não foi citado. Verifique se você executou as seguintes alterações:

  • Crie um espaço em branco __init__.py arquivo dentro da pasta apps (necessário para o python reconhecê-lo como um pacote)
  • Atualize as instruções de importação onde quer que você se refira a um aplicativo externo:

    from projectname.apps.appname.models import YourModel, YourOtherModel
    
  • Dentro settings.py editar INSTALLED_APPS de modo que fique assim:

    INSTALLED_APPS = (
    
    ...
    
    # apps
    "projectname.apps.appname1",
    "projectname.apps.appname2",
    )
    
  • Este não está especificado no guia: Em todo o seu urls.py arquivos, atualize o urlpatterns!

    ANTES:

    # client views
    urlpatterns += patterns("appname",
    ...
    )
    

    DEPOIS DE:

    # client views
    urlpatterns += patterns("projectname.apps.appname",
    ...
    )
    
  • Por fim, lembre-se de atualizar suas alterações ligando para python manage.py syncdb

Espero que tenha ajudado.