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', )
может быть, я ошибаюсь, но я бы попробовал это:) скажите мне, если вам нужна дополнительная помощь.