我使用的是django 1.10.5
似乎app1中的apps.py文件未导入,除非我在__init__中为该模块明确设置了default_app_config = 'app1.apps.App1Config'
。
然而,in the docs我正在阅读"新应用程序应避免使用default_app_config。相反,他们应该要求在INSTALLED_APPS中明确配置相应AppConfig子类的虚线路径。"
我正在阅读包含INSTALLED_APPS中的模块,如
INSTALLED_APPS = (
'...',
'app1',
)
我确实有。
也许我对语言"相应的AppConfig子类的#dc的虚线路径感到困惑"也许除了列出主要模块之外还有什么呢?
我的具体用途是我想导入handlers.py,因此它会包含在应用程序中,因为它有一些需要监听的信号接收器。
要做到这一点,我遵循了建议in the docs,其中说"实际上,信号处理程序通常在与其相关的应用程序的信号子模块中定义。信号接收器在应用程序配置类的ready()方法中连接。如果您正在使用receiver()装饰器,只需在ready()中导入信号子模块。"
# apps.py
from django.apps import AppConfig
class App1Config(AppConfig):
name = 'app1'
def ready(self):
import app1.handlers
# handlers.py
from django.dispatch import receiver
from django.db.models.signals import post_save
from app1.models import App1
@receiver(post_save, sender=App1)
def say_you_did_something(sender, instance, **kwargs):
print("Action has been taken.")
但这绝对没有...
直到我也添加
# __init__.py
default_app_config = 'individual.apps.IndividualConfig'
除了<之外应该避免的。 1.7
所以要用实际的术语重述这个问题,让项目了解handlers.py文件的推荐方法是什么?
答案 0 :(得分:1)
你误解了这条指令。如上所述,您需要在INSTALLED_APPS中包含 AppConfig类本身的虚线路径,而不是应用程序。
INSTALLED_APPS = (
'...',
'app1.apps.App1Config',
)
答案 1 :(得分:1)
替换
INSTALLED_APPS = (
'...',
'app1,
)
使用
INSTALLED_APPS = (
'...',
'app1.apps.App1Config',
)
无需在 init .py
中添加default_app_config在django 3.0应用程序文档中,提到了如何包括虚线路径。 以下是Django应用程序文档https://docs.djangoproject.com/en/3.0/ref/applications/#django.apps.AppConfig.ready的摘录:
对于应用程序作者¶ 如果您要创建一个名为“ Rock'n'roll”的可插拔应用,请按照以下步骤为管理员提供适当的名称:
# rock_n_roll/apps.py
from django.apps import AppConfig
class RockNRollConfig(AppConfig):
name = 'rock_n_roll'
verbose_name = "Rock ’n’ roll"
默认情况下,可以使您的应用程序加载此AppConfig子类,如下所示:
# rock_n_roll/__init__.py
default_app_config = 'rock_n_roll.apps.RockNRollConfig'
这将导致在INSTALLED_APPS包含“ rock_n_roll”时使用RockNRollConfig。这使您可以使用AppConfig功能,而无需您的用户更新其INSTALLED_APPS设置。除了这种用例之外,最好避免使用default_app_config,而应在INSTALLED_APPS中指定应用配置类,如下所述。
当然,您也可以告诉用户将“ rock_n_roll.apps.RockNRollConfig”放入其INSTALLED_APPS设置中。您甚至可以提供几种具有不同行为的AppConfig子类,并允许用户通过其INSTALLED_APPS设置选择一个。