Configuring applications配置应用程序
要配置一个应用程序,子类AppConfig
,并将虚线路径放在INSTALLED_APPS
中的该子类中。
当INSTALLED_APPS
只包含应用程序模块的虚线路径时,Django会检查该模块中的default_app_config
变量。
如果定义了它,那该应用程序的AppConfig
子类的虚线路径。
如果没有default_app_config
,Django
使用基础AppConfig
类。
default_app_config
允许早于Django 1.7的应用程序(如django.contrib.admin
)选择加入AppConfig
功能,而不需要用户更新其INSTALLED_APPS
。
新的应用程序应该避免使用default_app_config
。 相反,它们应该要求在INSTALLED_APPS
中明确配置适当的AppConfig子类的虚线路径。
对于应用程序作者
如果您正在创建一个名为“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
只包含'rockphasroll'
时,这将导致使用RockNRollConfig
。 这允许您使用AppConfig
功能,而不需要您的用户更新其INSTALLED_APPS
设置。 除了这个用例之外,最好避免使用default_app_config
,而是如下所述在INSTALLED_APPS
中指定app config
类。
当然,您也可以告诉用户将“rock_n_roll.apps.RockNRollConfig”
放在INSTALLED_APPS
设置中。 您甚至可以提供不同行为的几个不同的AppConfig
子类,并允许用户通过其INSTALLED_APPS
设置来选择一个。
推荐的约定是将配置类放在名为apps
的应用程序的子模块中。 但是,Django
并不执行此操作。
您必须包含Django
的name
属性,以确定此配置应用于哪个应用程序。 您可以定义AppConfig API
参考中记录的任何属性。
对于应用程序用户
如果您在一个名为选集的项目中使用“Rock ’n’ roll”
,但您希望将其显示为“Jazz Manouche”
,则可以提供自己的配置:
# anthology/apps.py
from rock_n_roll.apps import RockNRollConfig
class JazzManoucheConfig(RockNRollConfig):
verbose_name = "Jazz Manouche"
# anthology/settings.py
INSTALLED_APPS = [
'anthology.apps.JazzManoucheConfig',
# ...
]
再次,在名为apps
的子模块中定义项目特定的配置类是一个约定,而不是一个要求。