试着了解Django 的基本知识.即应用程序是如何工作的. doctor :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')

urls.py

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

嗯,这个观点是有效的.这意味着申请已注册.

推荐答案

你需要做两件事中的一件.要么明确说明您想要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美元.

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

Django相关问答推荐

Django、htmx删除记录并更新

RDBMS多对多关系Django

当使用django-tinymce时,我在哪里指定referer?

Templatetag 在 Django 4.2 模板 IF 条件中不起作用

如何使用邮箱确认码创建django注册

如何删除django请求中的重复项

Django REST Framework 图片上传

Django ORM 和锁定表

使用 Django 和 South 重命名应用程序

Django JSONField 过滤

如何在不使用 sudo 的情况下安装 virtualenv?

Django - 在模板中显示当前日期和时间

如何按名称设置 django 模型字段?

Django 删除未使用的媒体文件

django 管理列表中的外键显示

如何在 django 中分离我的模型?

如何在保存之前更改 Django 表单字段值?

使用 request.user 的 Django 和中间件始终是匿名的

AWS Cognito 作为网站的 Django 身份验证后端

警告:找不到分发的 svn 位置==0.6.16dev-r0