gpt4 book ai didi

python - 如何为不存在的第三方应用程序覆盖 Django apps.py 及其 AppConfig?

转载 作者:行者123 更新时间:2023-11-28 21:10:16 26 4
gpt4 key购买 nike

自 Django 1.7 以来,添加了 AppConfig 功能,建议将 post_migrate 信号放在其自定义实现的 ready() 部分 - https://docs.djangoproject.com/en/stable/ref/signals/#post-migrate

文档描述的实现 AppConfig 的基本方法是使用 default_app_config 设置在 __init__.py 文件中指向它。该文档还将建议一种方法来覆盖任何应用程序的现有 AppConfig: https://docs.djangoproject.com/en/stable/ref/applications/#for-application-users

我研究了一下,发现 django 实际上为 INSTALLED_APPS 中的每个应用程序创建了 AppConfig 实例,即使它的自定义实现没有实现,它也会引导默认的你。

我的问题是如何为未实现 AppConfig 的应用程序提供带有 post_migrate 信号的自定义应用程序配置(最简单的示例是第三方包没有 apps.py)?

我知道即使对于这个应用程序,django 也会创建一个默认版本的 AppConfig 但是我应该在哪里以及如何告诉它不要这样做并使用我的自定义 AppConfig 而不是使用覆盖的 ready() 方法实现来添加 post_migrate?

最佳答案

让我们假设您希望为 django crispy_forms(已安装到您的 virtualenv 中)创建自定义 AppConfig。

第 1 步:在您的项目中创建一个名为 crispy_forms 的文件夹。第 2 步:在该文件夹中创建一个 __init__.py 并粘贴以下内容

from django.apps import AppConfig

default_app_config = 'crispy_forms.apps.MyAppConfig'

第 3 步:在 crispy_forms 文件夹中创建一个 apps.py 并粘贴

from django.apps import AppConfig

class MyAppConfig(AppConfig):

verbose_name = 'customized crispy_forms'
name = "crispy_forms"

def __init__(self, app_name, app_module):
AppConfig.__init__(self,app_name, app_module)
print 'My app config', app_name, app_module

如果 django 没有重新加载类,请重新启动开发服务器,然后您将看到如下内容:

My app config crispy_forms <module 'crispy_forms' from '/home/xxx/project/crispy_forms/__init__.pyc'>

关于python - 如何为不存在的第三方应用程序覆盖 Django apps.py 及其 AppConfig?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36865765/

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