Yes, the order is quite important.
From Django official docs on INSTALLED_APPS settings:
When several applications provide different versions of the same
resource (template, static file, management command, translation), the
application listed first inINSTALLED_APPShas precedence.
Example-1 Templates:
django.template.loaders.app_directories.Loader
If this template loader is enabled in your DjangoTemplates backend in the TEMPLATES setting or if you have passed it as a loaders argument to Engine, then it loads templates from Django apps on the filesystem.
For each app in INSTALLED_APPS, the loader looks for a templates subdirectory. If the directory exists, Django will look for templates in there.
Lets say in my project, i have defined INSTALLED_APPS as:
INSTALLED_APPS = ('myproject.app1', 'myproject.app2')
Now, i want to get the template some_template.html. Then get_template('some_template.html') will look for some_template.html in these directories, in this order:
/path/to/myproject/app1/templates/ # checks here first
/path/to/myproject/app2/templates/ # Then checks here
It will then use the one which it finds first.
Quoting from that section:
The order of
INSTALLED_APPSis significant!
Example-2: Translations
Django applies the following algorithm for discovering translations:
- The directories listed in
LOCALE_PATHShave the highest precedence, with the ones appearing first having higher precedence than the ones appearing later. - Then, it looks for and uses if it exists a
localedirectory in each of the installed apps listed inINSTALLED_APPS. The ones appearing first have higher precedence than the ones appearing later. - Finally, the Django-provided base translation in
django/conf/localeis used as a fallback.
We can see that order is important here also.
Example-3 Management Commands:
From Django 1.7 release notes on management commands and order of INSTALLED_APPS:
When several applications provide management commands with the same
name, Django loads the command from the application that comes first
inINSTALLED_APPS. Previous versions loaded the command from the
application that came last.This brings discovery of management commands in line with other parts
of Django that rely on the order ofINSTALLED_APPS, such as static
files, templates, and translations.