一尘不染

重写AppConfig.ready()

django

在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')

urls.py

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

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


阅读 643

收藏
2020-03-29

共1个答案

一尘不染

你需要执行以下两项操作之一。要么明确地说出AppConfig你想要的INSTALLED_APPS

INSTALLED_APPS = [
    'my_app.apps.MyAppConfig'
]

或者,default_app_config__init__.py你的应用程序中定义:

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

(并保持INSTALLED_APPS原样)。

由于目前是Django,找不到AppConfig适用于该应用程序的任何内容,只是假设其中没有一个。因此,你的视图等将起作用,但该ready()方法将永远不会被调用。

2020-03-29