ChatGPT解决这个技术问题 Extra ChatGPT

覆盖 AppConfig.ready()

试图掌握 Django 的基础知识。即应用程序如何工作。文档:https://docs.djangoproject.com/en/stable/ref/applications/#methods

在 AppConfig 类的代码中,我们可以阅读:

def ready(self):
    """
    Override this method in subclasses to run code when Django starts.
    """

好吧,这是我的例子:

my_app/apps.py

class MyAppConfig(AppConfig):
    name = 'my_app'

    def ready(self):
        print('My app')

我只是想让准备好的方法工作。也就是说,当 Django 找到 my_app 时,让它运行 ready 方法。

该应用程序已在 INSTALLED_APPS 中注册。

我执行'python manage.py runserver'。并且没有打印任何内容。

如果我在 ready 方法中放置一个断点,调试器就不会停在那里。

你能帮我吗:我在这里理解的错误是什么。先感谢您。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'my_app',
]

我创建了一个视图

my_app/views.py

def index(request):
    print('Print index')

网址.py

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', my_app_views.index, name='home')
]

好吧,观点正在发挥作用。这意味着应用程序已注册。

请显示您在 INSTALLED_APPS 中注册应用程序的设置中的代码。
请参阅编辑后的帖子。
@Michael 它对你有用吗?因为我正在尝试做同样的事情并且我正在使用公认的答案但它不起作用
@KyluAce 是的,它运行正常。

s
solarissmoke

你需要做两件事之一。在 INSTALLED_APPS 中明确说明您想要哪个 AppConfig

INSTALLED_APPS = [
    'my_app.apps.MyAppConfig'
]

或者,在您的应用程序的 __init__.py 中定义一个 default_app_config

# my_app/__init__.py
default_app_config = 'my_app.apps.MyAppConfig'

(并保持 INSTALLED_APPS 不变)。

由于目前 Django 找不到该应用的任何 AppConfig,因此假设没有。因此,您的视图等将起作用,但永远不会调用 ready() 方法。

这是relevant section of the documentation

编辑:从 Django 3.2 开始,不再需要指定 default_app_configand is in fact deprecated - 所以这个答案对于使用 Django 3.2 或更高版本的任何人来说都是多余的。


当我尝试将该行添加到 my_app/__init__.py 时,它最终不会调用 ready() 函数。使用 INSTALLED_APPS 路由可以正常工作。知道为什么不叫它吗?
它给了我 django.core.exceptions.AppRegistryNotReady: 应用程序尚未加载。错误
请注意,您需要在 runserver 时添加 --noreload 参数以跳过两次调用 ready() 方法。
@ParikshitChalke 我有同样的问题。这是循环进口造成的。只需将您要导入的任何内容移动到 ready() 内而不是其外,它就会起作用。
@watersnake:就我而言,我在 default_app_config 中有错字:...AppConfig 而不是正确的 ...

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅