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', )

может быть, я ошибаюсь, но я бы попробовал это:) скажите мне, если вам нужна дополнительная помощь.