gpt4 book ai didi

django - 覆盖 AppConfig.ready()

转载 作者:行者123 更新时间:2023-11-28 19:34:03 26 4
gpt4 key购买 nike

试图了解 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')

我只是想让 ready 方法起作用。即当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',
]

然后我创建了一个 View

my_app/views.py

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

urls.py

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

好吧, View 正在工作。这意味着该应用程序已注册。

最佳答案

您需要做以下两件事之一。在 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 并且只是假设没有。因此您的 View 等将起作用,但永远不会调用 ready() 方法。

这是 relevant section of the documentation .

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

关于django - 覆盖 AppConfig.ready(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37429726/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com