更改设置文件夹后加载 admin.site.urls 问题

Posted

技术标签:

【中文标题】更改设置文件夹后加载 admin.site.urls 问题【英文标题】:Issue loading admin.site.urls after changing the settings folder 【发布时间】:2018-06-16 04:12:49 【问题描述】:

我重新组织了 Django,如下方式:

config
 - settings
     - base.py
     - local.py
 urls.py
 wsgi.py   

base.py/local.py:

ROOT_URLCONF = 'config.urls'
WSGI_APPLICATION = 'config.wsgi.application'

manage.py我改了:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local")

wsgi.py我改了:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local")

我在运行服务器上出现以下错误:

\django\contrib\admin\sites.py", line 269, in get_urls
    path('%s/%s/' % (model._meta.app_label, model._meta.model_name), include(model_admin.urls)),
AttributeError: 'AccountAdmin' object has no attribute 'urls'

与这一行有关:

 path('admin/', admin.site.urls), # Django 2.0 syntax

如果我评论该行,我会收到以下错误:

django\contrib\admin\sites.py", line 79, in check
    if modeladmin.model._meta.app_config in app_configs:
AttributeError: 'AccountAdmin' object has no attribute 'model

应用管理员在安装的应用中,我不知道是什么造成了这个问题。

【问题讨论】:

以下答案对您有帮助吗?如果没有,请提供一些反馈:) 【参考方案1】:

嗯...这里发生了几件事。一次一件事:

在您的settings 目录下放置一个__init__.py 文件,其中包含以下内容:

from .base import *

try:
    from .local import *
    LIVE = False
except ImportError:
    LIVE = True

if LIVE:
    try:
        from .production import *
    except ImportError:
        pass

通过将其放在__init__.py 文件中,您可以简单地使用'config.settings' 引用您的settings 文件,而无需引用localproduction__init__.py 将处理它们)。

既然这已经解决了,请将 both uwsgi.pymanage.py 更改为:

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings')

假设您已经完成了所有这些,它应该可以工作(这就是我多年来构建项目的方式并且从未遇到任何问题)。否则,请使用项目结构和base.pylocal.py 内容更新您的问题以解决问题。

【讨论】:

@thanks;我用开始工作的包重做了 django 布局;我有一个相关的问题:***.com/questions/48186359/…,请看一下

以上是关于更改设置文件夹后加载 admin.site.urls 问题的主要内容,如果未能解决你的问题,请参考以下文章

更新应用程序后加载错误的 xib

php - Laravel:如何在从下拉列表中选择更改后加载 Ajax 数据?

vue 首次加载缓慢/刷新后加载缓慢 原因及解决方案

一段时间后加载 XML 数据的动作脚本

Linux下文件 ~/.bashrc 和 ~/.bash_profile 和 /etc/bashrc 和 /etc/profile 的区别 | 用户登录后加载配置文件的顺序

DOM 准备好后加载 iframe。准备好文件