Skip to content

Server-side setup

To get started with Inertia in Django, the first step is to configure Django to use the inertia-django server-side adapter.

TIP

For new projects, we recommend following the template based setup guide.

Template-based setup

If you're starting a new project, we recommend configuring Django and Inertia using a django-vite-inertia template.

This will require uv or pipx to be installed.

First, let's create a new directory for our project.

shell
mkdir myproject

Next, we'll use the template based installer.

shell
uvx copier copy gh:sarthakjariwala/django-vite-inertia myproject
shell
pipx run copier copy gh:sarthakjariwala/django-vite-inertia myproject

This command will:

  • Create a new Django project in your myproject directory
  • Ask you to choose your preferred frontend framework:
    • React
    • Vue
    • Svelte
  • Ask you if you want to use Tailwind CSS
  • Ask you the database you want to use
    • SQLite
    • PostgreSQL
  • Ask you if you want to use Docker in development
  • Ask you if you want to use Docker in production
  • Set up Vite integration via django-vite
  • Set up Django to work with Inertia
  • Initialize the Inertia app
  • Configure CSRF to work properly with Django

Example output:

? Your project name: todo
? Which database do you want to use? postgresql
? Which frontend do you want to use? vue
? Do you want to use Tailwind CSS? Yes
? Do you want to use Docker in development? Yes
? Do you want to use Docker in production? Yes

You're all set! You can now start your development server.

Manual setup

TIP

Skip this section if you used the template based setup method.

Install dependencies

Install the inertia-django server-side adapter and related dependencies.

shell
uv add inertia-django django-vite
shell
python -m pip install inertia-django django-vite

Update installed apps

Add django_vite and inertia to your INSTALLED_APPS in settings.py.

python
INSTALLED_APPS = [
    # ...
    "django_vite",
    "inertia",
]

Update middleware

Next, add inertia.middleware.InertiaMiddleware to your MIDDLEWARE in settings.py.

python
MIDDLEWARE = [
    # ...
    "inertia.middleware.InertiaMiddleware",
]

Configure settings

Configure django-vite and inertia-django specific settings in settings.py.

python
# django-vite settings
# If using HMR (hot module replacement)
DJANGO_VITE = {
    "default": {
        "dev_mode": DEBUG,
        "dev_server_host": env.str("DJANGO_VITE_DEV_SERVER_HOST", default="localhost"),
        "dev_server_port": env.int("DJANGO_VITE_DEV_SERVER_PORT", default=5173),
    }
}

# Where ViteJS assets are built.
DJANGO_VITE_ASSETS_PATH = BASE_DIR / "src" / "dist"

# Include DJANGO_VITE_ASSETS_PATH into STATICFILES_DIRS to be copied inside
# when run command python manage.py collectstatic
STATICFILES_DIRS = [DJANGO_VITE_ASSETS_PATH]

For a complete list of available vite related settings, see django-vite docs.

python
# inertia-django settings
INERTIA_LAYOUT = "base.html" # update with your base template name

For a complete list of available inertia-django settings, see readme.

Update base template

In your base html template, add the following:

html
{% load django_vite %}

...
<head>
    ...
    {% vite_hmr_client %}
    {% vite_asset 'js/main.js' %}
</head>

<body>
    {% block inertia %}{% endblock %}
</body>