试图掌握 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
中注册应用程序的设置中的代码。
你需要做两件事之一。在 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_config
,and is in fact deprecated - 所以这个答案对于使用 Django 3.2 或更高版本的任何人来说都是多余的。
my_app/__init__.py
时,它最终不会调用ready()
函数。使用INSTALLED_APPS
路由可以正常工作。知道为什么不叫它吗?--noreload
参数以跳过两次调用 ready() 方法。ready()
内而不是其外,它就会起作用。