Wagtail
Django CMS focused on flexibility and user experience.
Open the official app on wagtail.org
This tool is hosted by its maintainers. Click below to open wagtail.org in a new tab — it's their official demo.
Browse productivity tools →What's next with Wagtail?
Choose how you want to get started.
Use it free
Open the official tool or demo — no account needed.
Self-host it
Run the open-source version on your own infrastructure.
What is Wagtail?
Wagtail is a browser tool.
How it works
Wagtail is a browser tool.
How to use it
- 1Use the Wagtail tool.
- 2Use the Wagtail tool.
- 3Use the Wagtail tool.
- 4Use the Wagtail tool.
What it can do
- AI Tools
Use cases
Assumptions and limitations
Assumptions
- source: https://github.com/wagtail
- license: BSD-3-Clause — free to use
- privacy: Opens an external demo
Limitations
- The system requires an active Python WSGI/ASGI server environment. For static-only hosting platforms like GitHub Pages, use a static site generator instead.
- The administration panel relies on a relational SQL database structure. For graph-based or unstructured document stores, implement a dedicated NoSQL database architecture.
- The default search backend uses basic database queries which struggle with large-scale relevance scoring. For millions of documents, integrate the Elasticsearch backend extension.
- Complex custom StreamField migrations require manual database schema rewriting in Python. For rapid prototyping with constantly changing schemas, consider a headless NoSQL CMS.
Understanding the result
Django CMS focused on flexibility and user experience.
Tool details
- Clearly flagged when a network request is needed.
- No account, no sign-up, and no tracking of your content.
- Powered by wagtail (BSD-3-Clause).
- Built with
- wagtail (https://github.com/wagtail)
- License
- BSD-3-Clause
- Runs locally
- No — requires a network request
- Verification
- Not yet verified
- Input
- Text
- Output
- Output
Built with https://github.com/wagtail. OpenToolVault provides the discovery and browser interface while crediting the original project maintainers.
- Built with
- wagtail
- License
- BSD-3-Clause
Open-source project
OpenToolVault is an independent directory. We are not affiliated with or endorsed by this project.
References
- /wagtail — GitHub Repository
Upstream project · GitHub
- BSD-3-Clause License
Upstream project
Frequently asked
How do I add custom fields to a page model in Wagtail?
To add custom fields, open your models.py file and import specific field types from django.db.models such as CharField, TextField, or RichTextField. Inside your inherited Page class, define these fields as class attributes just like in standard Django development. After adding your fields, run python manage.py makemigrations in your terminal to generate the database instructions. Next, execute python manage.py migrate to apply those schema changes to your active database. Finally, include these fields in your page's content_panels definition so they appear in the administrative editing interface for content creators.
What is the underlying algorithmic mechanism of the Wagtail page routing system?
The routing mechanism operates via a tree-traversal algorithm that matches URL path components against the nested node paths stored in the database. When an incoming request hits the WSGI application, Wagtail's Site middleware identifies the correct root page based on the incoming HTTP Host header. The request path is then split into segments and evaluated recursively down the tree nodes using modified pre-order tree traversal patterns. Once the deepest matching page node is identified, the system instantiates the corresponding Python model class and invokes its custom route method to handle remaining URL sub-paths.
How can I set up headless API endpoints in my Wagtail project?
To configure headless endpoints, you need to enable the built-in wagtail.api.v2 module within your Django installed applications settings. Next, create an api.py file in your app directory and register your custom page models by subclassing Wagtail's PageViewSet or PagesAPIEndpoint. Include the API router URLs inside your project's main urls.py file under a designated path like api/v2/. You can then send GET requests to endpoint URLs such as /api/v2/pages/ to retrieve fully serialized JSON representations of your content tree, including all StreamField blocks and custom metadata.
How is Wagtail different from traditional WordPress installations?
While WordPress relies on a flat post-type structure supplemented by plugin-heavy page builders like Elementor, Wagtail is built on Django and enforces strict, code-defined data models. This structural difference means Wagtail websites are significantly more secure, performant, and resistant to malicious plugin vulnerabilities. Additionally, Wagtail's StreamField gives editors modular layout control without letting them break underlying HTML templates, whereas WordPress builders frequently output bloated, difficult-to-maintain markup. Wagtail is fundamentally designed for Python engineers and professional editorial teams, whereas WordPress targets general consumers.
Why am I getting a Site matching query does not exist error when starting my project?
This error occurs when the database lacks a default Site record matching the incoming domain name or port number of your request. To fix this, log into your Django administrative dashboard at /admin/, navigate to the Settings section, and click on Sites. Ensure that you have created a Site object whose hostname matches your current local address, such as localhost or 127.0.0.1, and that the port number aligns with your development server setting. Alternatively, you can seed this default site programmatically by writing a custom data migration or management command using Wagtail's Site.objects.get_or_create() API.