# Django Content Studio > A modern alternative to the classic Django admin, with batteries included. Register a plain Django model and editors get a list page, an edit page with dedicated widgets, a dashboard and a media library, all configured in Python. Content Studio is configured in Python: a studio (a `ModelStudio` subclass registered with `content_studio.register` in an app's `admin.py`) per model, and a site (a `ContentStudioSite` subclass, named by the `ADMIN_SITE` setting) for the dashboard, menus and extensions. Only the names on the Public API page are supported; custom widgets, formats, components and dashboard widget types are not. Run `python manage.py check` after a change: the system checks report most configuration mistakes. - [Full documentation](https://djangocontentstudio.org/llms-full.txt): every page below in one file. - [Agent skill](https://djangocontentstudio.org/skills/django-content-studio/SKILL.md): how to set up and configure Content Studio, its main APIs and common mistakes. ## Docs - [Introduction](https://djangocontentstudio.org/docs/intro.md): Django Content Studio is a modern alternative to the classic Django admin, with batteries included. Register a model and it becomes manageable in the admin: with a list page, search, filters, an edit page with dedicated widgets, inlines, a dashboard and a media library. - [Getting started](https://djangocontentstudio.org/docs/getting-started.md): This page takes you from installation to your first model in the admin. The examples use a blog project: the project package `mysite` and an app called `blog`. - [Registering models](https://djangocontentstudio.org/docs/registering-models.md): A model appears in the admin once you register it with a studio: a `ModelStudio` subclass that configures its list page and edit page. Put the registrations in your app's `admin.py`, where Content Studio looks for them. - [List page](https://djangocontentstudio.org/docs/list-page.md): Every registered model gets a list page, where editors search, filter, sort and act on its objects. You configure it on the model's studio, next to the options on Registering models. - [Edit page layout](https://djangocontentstudio.org/docs/edit-page.md): By default, the edit page shows the model's fields in the order they are declared. Set `edit_main` and `edit_sidebar` on the studio to choose the fields and lay them out, with the building blocks in `content_studio.form`. - [Widgets](https://djangocontentstudio.org/docs/widgets.md): Every field on the edit page is edited with a widget. Content Studio picks the widget from the field's type, so most models need no configuration. - [Block fields](https://djangocontentstudio.org/docs/block-fields.md): A block field holds an ordered list of content blocks, such as text and images. Editors add, reorder and remove blocks freely, so they can build a page body from the blocks you define. Use it for content an editor composes; give anything with a fixed place on the page, such as a page's title or header image, a regular field. - [Media library](https://djangocontentstudio.org/docs/media-library.md): The media library is where editors upload and organize files: images, video, audio and documents, in folders. Fields such as `MediaField` then pick files from it. The library works with your own media models, or with the ready-made models Content Studio ships. - [Dashboard](https://djangocontentstudio.org/docs/dashboard.md): The dashboard is the admin's start page. You compose it in Python from widgets: statistics, lists of content, recent activity and scheduled tasks. - [Extensions](https://djangocontentstudio.org/docs/extensions.md): Extensions add links, buttons and pages to the admin's menus: a link to an external tool, a button that runs your code, another web application shown inside the admin, or a page with a dashboard of its own. For your website's visitor statistics, see Analytics. - [Analytics](https://djangocontentstudio.org/docs/analytics.md): Show your website's visitor statistics in the admin: a dedicated analytics page, the statistics of the object being edited, and widgets for the dashboard. Content Studio reads them from your analytics tool through a provider. It ships one for Umami, and you can write your own for another tool. - [Access control](https://djangocontentstudio.org/docs/permissions.md): Content Studio uses the permission system of the classic Django admin. Only active staff users can log in, editors need Django's model permissions to see and change content, and the permission hooks on a studio can restrict access further, down to single objects. - [Authentication](https://djangocontentstudio.org/docs/authentication.md): Editors log in to the admin with their username and password, like in the classic Django admin. Content Studio handles the sessions itself and is configured entirely through the `CONTENT_STUDIO` setting, so it never interferes with the authentication your project uses elsewhere. - [Multi-tenancy](https://djangocontentstudio.org/docs/multi-tenancy.md): With multi-tenancy, one admin serves several tenants, such as the organizations of a platform. Editors pick a tenant and only see and change that tenant's content. - [Webhooks](https://djangocontentstudio.org/docs/webhooks.md): Webhooks send a request to a URL after editors change content in the admin. Use them to rebuild a static site, clear a cache or notify another service, for example with the build hook of your hosting provider. In Python, the `content_changed` signal gives you the same changes without a webhook. - [Notifications](https://djangocontentstudio.org/docs/notifications.md): Notifications tell editors in the admin what other editors changed. An editor hears about changes to the objects they created, to every object of a model they subscribed to, and to the objects they follow. Your project can add events of its own, such as an article submitted for review, and send them from Python. - [Presence](https://djangocontentstudio.org/docs/presence.md): Presence shows editors who else has an object open. On the edit page, the avatars of the other editors appear in the header; on the list page, a row shows the avatars of the editors who have that object open. It helps editors notice that a colleague is working on the same object before their changes cross. - [Command palette](https://djangocontentstudio.org/docs/command-palette.md): The command palette is the quickest way around the admin. Press ⌘K on macOS or Ctrl K on Windows and Linux, or click the search button at the top of the main menu, and type where you want to go. - [Deployment](https://djangocontentstudio.org/docs/deployment.md): Everyone who can log in to the admin can change your content. This page lists what to configure before you go live, what Content Studio protects out of the box, and the system checks that catch configuration mistakes. - [Settings reference](https://djangocontentstudio.org/docs/settings.md): All settings live in one `CONTENT_STUDIO` dictionary in your Django settings. Every setting is optional; leave out the ones you do not change. - [Public API](https://djangocontentstudio.org/docs/public-api.md): Content Studio follows semantic versioning for its public API: from version 1.0, the names on this page only change in a major release, after a deprecation period with a warning. - [AI agents](https://djangocontentstudio.org/docs/ai-agents.md): AI coding agents, such as Claude Code, Codex or Cursor, can set up and configure Content Studio for you. Give them the documentation in a form they read well: an index and a full text of the docs, and an agent skill with the setup, the main APIs and the mistakes to avoid. ## Optional - [How it compares](https://djangocontentstudio.org/docs/comparison.md): Several projects improve on or replace the classic Django admin. They solve different problems, so the right choice depends on what you build. This page describes how Content Studio differs from the most common ones.