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.

What You'll Learn in This Lesson

1 Project vs App: The Conceptual Difference

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:

2 Creating an App with startapp

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:

3 Registering the App in INSTALLED_APPS

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.

🎯 Your Turn: Register the Right App

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

Common Errors (And How to Fix Them)

❌ 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.

📋 Quick Reference

Term / Command

What It Means

django-admin startproject mysite

Create the project (the whole site)

python manage.py startapp blog

Create an app (one feature) inside the project

INSTALLED_APPS

List in settings.py where you register each app

models.py

Defines an app's database tables

apps.py

Configuration class that names the app

🏆 Mini Challenge: Scaffold a Multi-App Project

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

❓ Frequently Asked Questions

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.

Continue this course