【问题标题】:Django 1.7 app config ImportError: No module named appname.appsDjango 1.7 应用程序配置 ImportError:没有名为 appname.apps 的模块
【发布时间】:2014-09-11 10:57:06
【问题描述】:

我正在尝试按照https://docs.djangoproject.com/en/dev/ref/applications/ 的文档为我的一个名为“articles”的 Django 应用程序设置自定义应用程序配置,但是在执行 ./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')

我的INSTALLED_APPS 中有'projectname.apps.articles'

只是为了确保我确实拥有所有这些文件并且没有弄乱路径

>>> 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

【问题讨论】:

  • 你能显示你的 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' , 'sefaro.apps.articles', )

标签: python django django-1.7


【解决方案1】:

根据具体的 Django 项目结构(所有应用程序都位于projectname/apps/ 模块中)应使用包含项目名称的完整路径

正如文档 https://docs.djangoproject.com/en/dev/ref/applications/#django.apps.AppConfig.name 所说:

AppConfig.name

应用程序的完整 Python 路径,例如'django.contrib.admin'。

应该是这样的:

# 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'

【讨论】:

  • 在名称配置中提供项目名称为我做到了
【解决方案2】:

应用配置中的名称属性应该与我们在已安装应用中提供的相同。

另外default_app_config 应该为您的自定义配置提供正确的路径,例如,

default_app_config = 'projectname.apps.articles.apps.ArticlesConfig

【讨论】:

    【解决方案3】:

    我认为问题可能集中在您的 articles/__init__.py 文件中。

    我的意思是......在文档中说:

    当然,您也可以告诉您的用户将“rock_n_roll.apps.RockNRollConfig”放入他们的 INSTALLED_APPS 设置中。

    您试图删除“default_app_config”语句并且只在 INSTALLED_APPS 中获取 articles.apps.ArticlesConfig

    我这么说是因为文档说:

    这将导致在 INSTALLED_APPS 仅包含“rock_n_roll”时使用 RockNRollConfig。

    如果在 articles/__init__.py 中声明了 default_apps_config,则只需在您的 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', )
    

    也许我错了,但我会尝试 :) 如果您需要更多帮助,请告诉我。

    【讨论】:

    • 我试图将'articles''sefaro.articles.apps.ArticlesConfig' 放在我的 INSTALLED_APPS 中,但没有运气 :( 唯一真正有效的正确变体是 'sefaro.apps.articles',但前提是要注释掉articles/__init__.py 中的 default_app_config (所以没有启用自定义配置)我会尝试重新加载我的 vagrant box 并保持我的手指交叉......
    • 重新加载我的 Vagrant 盒子没有帮助
    • 看来你解决了你的问题 :) 我也学会了如何解决这类问题。非常感谢!
    猜你喜欢
    • 2017-01-24
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 2018-03-10
    • 2012-10-21
    • 1970-01-01
    相关资源
    最近更新 更多