INSTALLED_APPS
的应用顺序重要吗?我问它,因为我有settings
文件夹,有两个settings
文件:base.py
和production.py
,我把所有设置放在base.py
中,然后在production.py
中,我有:
from base import *
,然后重写一些设置。同样在我的base.py
中,我使INSTALLED_APPS
成为一个列表,而不是一个元组。因为我想删除一些production
设置的应用程序。在production.py
我想写:
NOT_USED_APPS = ['debut_toolbar', 'other_odd_app',]
INSTALLED_APPS = list(set(INSTALLED_APPS) - set(NOT_USED_APPS))
在这种情况下,INSTALLED_APPS
中的应用程序顺序与base.py
中的不同
是的,顺序很重要。
来自Django官方文档关于INSTALLED_APPS
设置:
当几个应用程序提供相同的不同版本时资源(模板、静态文件、管理命令、翻译)、在
INSTALLED_APPS
中首先列出的应用程序具有优先级。
示例1模板:
django.template.loaders.app_directories.Loader
如果这个模板加载器在你的DjangoTemplates
后端在TEMPLATES
设置中被启用,或者如果你把它作为一个loaders参数传递给Engine,那么它会从Django应用程序的文件系统中加载模板。
对于INSTALLED_APPS
中的每个应用程序,加载器寻找一个模板子目录。如果该目录存在,Django将在其中查找模板。
让我们说在我的项目中,我已经定义了INSTALLED_APPS
为:
INSTALLED_APPS = ('myproject.app1', 'myproject.app2')
现在,我想得到模板some_template.html
。然后get_template('some_template.html')
将在这些目录中查找some_template.html
, 按此顺序:
/path/to/myproject/app1/templates/ # checks here first
/path/to/myproject/app2/templates/ # Then checks here
它将使用它首先找到的那个
引用那一段:
INSTALLED_APPS
的顺序是显著的!
示例2:翻译
Django使用以下算法来发现翻译:
-
LOCALE_PATHS
中列出的目录优先级最高,先出现的目录优先级高于后出现的目录。 - 然后,它在
INSTALLED_APPS
中列出的每个已安装的应用程序中查找并使用是否存在locale
目录。 先出现的优先级高于后出现的。最后,django在
django/conf/locale
中提供的基本翻译被用作备用。我们可以看到顺序在这里也很重要。
示例3管理命令:
来自Django 1.7发布说明中的管理命令和INSTALLED_APPS
的顺序:
当多个应用程序提供相同的管理命令时name时,Django会从最先出现的应用程序中加载命令在
INSTALLED_APPS
。控件加载命令最后一个应用程序这使得管理命令的发现与其他部分一致依赖于
INSTALLED_APPS
顺序的Django,比如static文件、模板和翻译
我做了一些实验,发现了另外两件我认为有用的事情:
-
INSTALLED_APPS
中的顺序似乎在模型创建时不起作用。Django发现某些模型依赖于其他模型,并以正确的顺序运行它们。 -
应用程序在
AppConfig
对象中的ready
方法似乎按照它们在INSTALLED_APPS
中出现的顺序运行。