【问题标题】:Restructure default hierarchy of Django project, moving all apps into a folder with custom model重构 Django 项目的默认层次结构,将所有应用程序移动到具有自定义模型的文件夹中
【发布时间】:2018-12-23 07:43:29
【问题描述】:

我正在尝试将我的 Django 应用程序中的所有应用程序移动到一个文件夹调用应用程序:

我现在的结构是:

miApp
-accounts #App folder
-participation #App folder
-administration #App folder

-miapp 
--wsgi.py
--urls.py
--settings
---development.py
---production.py
---__init__.py
-static

我想要这样的东西

miApp
-apps #New folder for the apps
--accounts #App folder
--reputation #App folder
--participation #App folder
--administration #App folder
--__init__.py
-miApp 
--wsgi.py
--urls.py
--settings
---common.py #Common settings for develpment and production
---development.py
---production.py
---__init__.py
-static
...

我已经尝试将它们全部移动到同一个文件夹,

我在 miApp.urls

中做了以下更改
path('', views.inicio, name='inicio'),
path('admin/', admin.site.urls),
path('cuentas/', include('apps.accounts.urls')),
path('participation/', include('apps.participation.urls')),
path('administracion/', include('apps.administration.urls')),

还有这个,在 common.py 的设置中

DJANGO_APPS = ['django.contrib.admin',
                'django.contrib.auth',
                'django.contrib.contenttypes',
                'django.contrib.sessions',
                'django.contrib.messages',
                'django.contrib.staticfiles',
                'django.contrib.sites'
               ]
THIRD_PARTIES = [# Django AllAuth
                'allauth',
                'allauth.account',
                'allauth.socialaccount',
                'allauth.socialaccount.providers.facebook',
                'allauth.socialaccount.providers.google',
                'allauth.socialaccount.providers.twitter',
                # Django guardian
                'guardian',
                #Django meta
                'meta',
                # Django push notifications
                'push_notifications',
                ]

MI_APP_APPS = [# MyVoto Instaled apps
                'apps.accounts.apps.AccountsConfig',
                'apps.participation.apps.ParticipationConfig',
                'apps.administration.apps.AdministrationConfig']

INSTALLED_APPS = DJANGO_APPS + THIRD_PARTIES + MI_APP_APPS

我在 apps.py 中有以下配置类

class AccountsConfig(AppConfig):
    name = 'apps.accounts'

class AdministrationConfig(AppConfig):
    name = 'apps.administration'

class ParticipationConfig(AppConfig):
    name = 'apps.participation'

我收到以下错误:

Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x107afa488>
Traceback (most recent call last):
  File "/Users/robertofernandez/PycharmProjects/miApp/venv/lib/python3.6/site-packages/django/apps/config.py", line 143, in create
    app_module = import_module(app_name)
  File "/usr/local/Cellar/python3/3.6.3/Frameworks/Python.framework/Versions/3.6/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'accounts'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/robertofernandez/PycharmProjects/miApp/venv/lib/python3.6/site-packages/django/utils/autoreload.py", line 225, in wrapper
    fn(*args, **kwargs)
  File "/Users/robertofernandez/PycharmProjects/miApp/venv/lib/python3.6/site-packages/django/core/management/commands/runserver.py", line 112, in inner_run
    autoreload.raise_last_exception()
  File "/Users/robertofernandez/PycharmProjects/miApp/venv/lib/python3.6/site-packages/django/utils/autoreload.py", line 248, in raise_last_exception
    raise _exception[1]
  File "/Users/robertofernandez/PycharmProjects/miApp/venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 327, in execute
    autoreload.check_errors(django.setup)()
  File "/Users/robertofernandez/PycharmProjects/miApp/venv/lib/python3.6/site-packages/django/utils/autoreload.py", line 225, in wrapper
    fn(*args, **kwargs)
  File "/Users/robertofernandez/PycharmProjects/miApp/venv/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/Users/robertofernandez/PycharmProjects/miApp/venv/lib/python3.6/site-packages/django/apps/registry.py", line 89, in populate
    app_config = AppConfig.create(entry)
  File "/Users/robertofernandez/PycharmProjects/miApp/venv/lib/python3.6/site-packages/django/apps/config.py", line 147, in create
    app_name, mod_path, cls_name,
django.core.exceptions.ImproperlyConfigured: Cannot import 'accounts'. Check that 'apps.accounts.apps.AccountsConfig.name' is correct.

我在 apps.accounts.apps.py 中有以下内容

类 AccountsConfig(AppConfig): 名称 = '帐户'

【问题讨论】:

  • 您没有发布 Config 类的内容。
  • 我只是更新它;)

标签: python django


【解决方案1】:

我认为以这种方式移动应用程序文件夹不是一个好习惯,但您是否尝试在 apps 中添加 __init__.py 文件?

miApp
-apps #New folder for the apps
--accounts #App folder
--reputation #App folder
--participation #App folder
--administration #App folder
--__init__.py

编辑
我认为问题在于您的apps.py 文件的位置。根据您在INSTALLED_APPS 中的内容,它会尝试从每个应用文件夹中的apps.py 获取您的配置类。

检查this answer,这个人准确地描述了你想要做什么。
确实要确保在 apps 文件夹和每个应用程序文件夹中都有 __init__.py 文件。

  1. 移动您的应用程序
  2. INSTALLED_APPSurls.py 中的应用程序前缀更改为apps.

【讨论】:

  • 是的,我有 init.py 文件,我忘了在架构中添加它
  • 如果在已安装的应用程序中将apps.&lt;your_app&gt;.apps.&lt;your_app_config&gt; 替换为apps.&lt;your_app&gt;,是否会出现同样的错误?
  • 编辑了答案
【解决方案2】:

问题在于,当我在 common.py 中使用自定义用户模型时,我遇到了这个问题:

AUTH_USER_MODEL = 'accounts.User'

通过我所做的更改,我还将前缀应用程序添加到此设置中, 不知道为什么这个设置它的工作方式不同,但是我没有添加前缀 apps 我不得不像以前一样保留它。

我认为这可能是初始迁移的原因,在设置自定义模型的初始迁移中,路径可能存储在某处,这可能是导致问题的原因

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 2017-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多