Django 1.7 app config ImportError: нет модуля с именем appname.приложения
Я пытаюсь настроить пользовательскую конфигурацию приложения для одного из моих приложений Django под названием "статьи", следуя документации по адресу https://docs.djangoproject.com/en/dev/ref/applications/, но я продолжаю получать ImportError: No module named articles.apps для выполнения ./manage.py check (или любая другая команда Управления, такая как ./manage.py runserver)
это дерево проекта
projectname
    ├── apps
    │   ├── articles
    │   │   ├── admin.py
    │   │   ├── apps.py
    │   │   ├── __init__.py
    │   │   ├── migrations
    │   │   │   ├── 0001_initial.py
    │   │   │   └── __init__.py
    │   │   ├── models.py
    │   │   ├── templates
    │   │   │   └── articles
    │   │   ├── templatetags
    │   │   │   ├── articles_tags.py
    │   │   │   └── __init__.py
    │   │   ├── tests.py
    │   │   ├── urls.py
    │   │   └── views.py
    │   ├── __init__.py
установленное приложение в settings.py:
INSTALLED_APPS = (
  'grappelli',
  'django.contrib.admin', 
  'django.contrib.auth', 
  'django.contrib.contenttypes', 
  'django.contrib.sessions', 
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'django.contrib.humanize', 
  'grappelli.dashboard', 
  'mptt', 
  'sekizai', 
  'pytils', 
  'sorl.thumbnail',
  'sefaro.apps.utils', 
  'sefaro.apps.seo', 
  'sefaro.apps.staticpages', 
  'sefaro.apps.statictext', 
  'sefaro.apps.usersettings', 
  'sefaro.apps.navigation', 
  'sefaro.apps.slideshow',
  'sefaro.apps.articles', 
) 
содержание articles/__init__.py:
# articles/__init__.py
default_app_config = 'articles.apps.ArticlesConfig'
содержание articles/apps.py:
# -*- coding: utf-8 -*-
from django.apps import AppConfig
from django.utils.translation import ugettext_lazy as _
class ArticlesConfig(AppConfig):
    name = 'articles'
    verbose_name = _(u'Articles')
и 'projectname.apps.articles' в своем INSTALLED_APPS
просто чтобы убедиться, что у меня действительно есть все эти файлы и не напутал с путями
>>> from projectname.apps.articles.apps import ArticlesConfig
>>> ArticlesConfig
<class 'projectname.apps.articles.apps.ArticlesConfig'>
все импортирует нормально...
но:
(vagrant)vagrant@vagrant-ubuntu-trusty-32:~/django$ ./manage.py check
Traceback (most recent call last):
  File "./manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/vagrant/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/home/vagrant/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 354, in execute
    django.setup()
  File "/home/vagrant/local/lib/python2.7/site-packages/django/__init__.py", line 21, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/home/vagrant/local/lib/python2.7/site-packages/django/apps/registry.py", line 85, in populate
    app_config = AppConfig.create(entry)
  File "/home/vagrant/local/lib/python2.7/site-packages/django/apps/config.py", line 112, in create
    mod = import_module(mod_path)
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
ImportError: No module named articles.apps
            3 ответов
В соответствии с конкретной структурой проекта Django (все приложения расположены в projectname/apps/ модуль)полный путь включая имя проекта следует использовать.
как doc https://docs.djangoproject.com/en/dev/ref/applications/#django.apps.AppConfig.name говорит:
AppConfig.имя
полный путь Python к приложению, например ' django.ВНО.админ.
поэтому он должен быть:
# articles/apps.py:
from django.apps import AppConfig
from django.utils.translation import ugettext_lazy as _
class ArticlesConfig(AppConfig):
    name = 'projectname.apps.articles'
    verbose_name = _(u'Articles')
и
# articles/__init__.py
default_app_config = 'projectname.apps.articles.apps.ArticlesConfig'
атрибут name в конфигурации приложения должен быть таким же, как и в установленных приложениях.
и default_app_config должен дать правильный путь к вашей пользовательской конфигурации, например,
default_app_config = 'projectname.apps.articles.apps.ArticlesConfig
Я думаю, что проблема может быть сосредоточена в вашем articles/__init__.py файл.
Я имею в виду... В документации сказано:
конечно, вы также можете сказать своим пользователям поставить ' rock_n_roll.приложения.RockNRollConfig ' в их настройке INSTALLED_APPS.
вы пытались удалить оператор" default_app_config " и только получить свой статьи.приложения.ArticlesConfig в INSTALLED_APPS?
Я говорю это, потому что врачи говорят:
это заставит RockNRollConfig использоваться, когда INSTALLED_APPS просто содержит 'rock_n_roll'.
в случае, если default_apps_config объявлен вarticles/__init__.py, в вашем INSTALLED_APPS это только необходимо:
INSTALLED_APPS = ( 'grappelli', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.humanize', 'grappelli.dashboard', 'mptt', 'sekizai', 'pytils', 'sorl.thumbnail', 'sefaro.apps.utils', 'sefaro.apps.seo', 'sefaro.apps.staticpages', 'sefaro.apps.statictext', 'sefaro.apps.usersettings', 'sefaro.apps.navigation', 'sefaro.apps.slideshow', 'articles', )
может быть, я ошибаюсь, но я бы попробовал это:) скажите мне, если вам нужна дополнительная помощь.