Commit e0519301 authored by Tim Graham's avatar Tim Graham
Browse files

Fixed #25748 -- Added clarification on projects vs. applications.

Thanks Thomas Güttler for motivating this addition.
parent e429c518
Loading
Loading
Loading
Loading
+15 −7
Original line number Diff line number Diff line
@@ -18,15 +18,19 @@ This registry is simply called :attr:`~django.apps.apps` and it's available in
Projects and applications
=========================

Django has historically used the term **project** to describe an installation
of Django. A project is defined primarily by a settings module.
The term **project** describes a Django web application. The project Python
package is defined primarily by a settings module, but it usually contains
other things. For example, when you run  ``django-admin startproject mysite``
you'll get a ``mysite`` project directory that contains a ``mysite`` Python
package with ``settings.py``, ``urls.py``, and ``wsgi.py``. The project package
is often extended to include things like fixtures, CSS, and templates which
aren't tied to a particular application.

The term **application** describes a Python package that provides some set of
features. Applications may be reused in various projects.

.. note::
    This terminology is somewhat confusing these days as it became common to
    use the phrase "web app" to describe what equates to a Django project.
features. Applications :doc:`may be reused </intro/reusable-apps/>` in various
projects. A project's root directory (the one that contains ``manage.py``) is
usually the container for all of a project's applications which aren't
installed separately.

Applications include some combination of models, views, templates, template
tags, static files, URLs, middleware, etc. They're generally wired into
@@ -41,6 +45,10 @@ interact with installed applications, mainly for configuration and also for
introspection. That's why the application registry maintains metadata in an
:class:`~django.apps.AppConfig` instance for each installed application.

There's no restriction that a project package can't also be considered an
application and have models, etc. (which would require adding it to
:setting:`INSTALLED_APPS`).

.. _configuring-applications-ref:

Configuring applications