Projects vs Apps

In Django, a project is the overall configuration and container for a website, while an app is a self-contained, reusable module inside that project that handles one specific feature (like a blog, a poll, or user accounts).

Learn Projects vs Apps in our free Django course — a beginner-friendly interactive lesson with worked examples, a practice exercise and a quick reference.

Part of the free Django course at LearnCodingFast — hands-on lessons with examples you run in your browser, plus practice exercises and a quick quiz.

In this lesson you'll learn exactly how projects and apps differ, how to create an app, what files Django generates for you, and the one step beginners always forget — registering the app so Django actually uses it.

A project is the whole website. It owns the global configuration in settings.py , the root URL routing table in urls.py , and the server entry points ( wsgi.py and asgi.py ). There is exactly one project per site.

An app is a self-contained module that delivers one feature — a blog, a poll, user accounts, a shopping cart. A project can contain many apps, and a single well-built app can be dropped into a completely different project and reused.

Here is how the two folder structures relate inside a single site:

From inside your project folder (the one containing manage.py ), run the startapp command. Here we create an app named blog :

Django generates a new blog/ folder with these files:

Creating the app folder is only half the job. Django does not know the app exists until you add it to the INSTALLED_APPS list in settings.py . This single step is the one beginners forget most often.

Fill in the blank so the new app named polls is added to INSTALLED_APPS .

❌ My models don't appear / no migrations are created

You ran startapp but forgot to register the app, so Django never sees its models.

✅ Fix: add the app's name to INSTALLED_APPS in settings.py , then run makemigrations .

❌ CommandError: 'blog' conflicts with the name of an existing directory

An app (or folder) called blog already exists, so startapp refuses to overwrite it.

✅ Fix: choose a different app name, or delete/rename the existing folder if it was a mistake.

❌ can't open file 'manage.py': No such file or directory

You ran startapp from the wrong directory — manage.py isn't there.

✅ Fix: cd into the project folder that contains manage.py first, then run the command.

Write a helper that prints the commands and the INSTALLED_APPS entries needed to add several apps to a project.

Lesson 2 complete — you can structure a Django site!

You now know that a project is the configuration and container while apps are focused, reusable feature modules. You can create an app with startapp , recognise every file it generates, and register the app in INSTALLED_APPS so Django actually uses it.

🚀 Up next: Views & URLs — learn how to map a URL to a view and send a real response to the browser.

Practice quiz

In Django, what is a project?

  • A single reusable feature module
  • The overall website: configuration and container
  • A database table
  • A URL pattern

Answer: The overall website: configuration and container. A project is the whole site, holding settings.py, the root urls.py, and the server entry points.

What is a Django app?

  • A self-contained module for one feature
  • The global settings file
  • The web server
  • The database engine

Answer: A self-contained module for one feature. An app is a self-contained module that implements one specific feature and can be reused.

Which command creates a new app inside a project?

  • django-admin startproject
  • python manage.py runserver
  • python manage.py startapp
  • python manage.py migrate

Answer: python manage.py startapp. python manage.py startapp <name> scaffolds a new app folder.

Which command creates the project itself?

  • python manage.py startapp
  • python manage.py createproject
  • django-admin newsite
  • django-admin startproject

Answer: django-admin startproject. django-admin startproject <name> creates the project and its configuration package.

Which list must you add an app to so Django uses it?

  • INSTALLED_APPS
  • MIDDLEWARE
  • TEMPLATES
  • DATABASES

Answer: INSTALLED_APPS. An app must be registered in INSTALLED_APPS in settings.py before Django detects it.

What is the relationship between projects and apps?

  • One app contains many projects
  • One project can contain many apps
  • They are the same thing
  • Each app needs its own project

Answer: One project can contain many apps. A single project can contain many apps, and one app can be reused across projects.

Which file does startapp generate to configure the app?

  • settings.py
  • urls.py
  • apps.py
  • wsgi.py

Answer: apps.py. startapp creates apps.py containing the app's configuration class.

Which file holds an app's database models?

  • views.py
  • admin.py
  • tests.py
  • models.py

Answer: models.py. models.py is where you define an app's database tables as model classes.

What happens if you create an app but never add it to INSTALLED_APPS?

  • Django does not detect its models or migrations
  • Django auto-registers it on restart
  • The app runs but slower
  • Migrations are created automatically

Answer: Django does not detect its models or migrations. Until registered, Django ignores the app's models, migrations, templates, and tests.

From which directory should you run startapp?

  • The home directory
  • The folder containing manage.py
  • The migrations folder
  • The static folder

Answer: The folder containing manage.py. startapp is run from the project folder that contains manage.py.