Skip to content

Latest commit

 

History

898 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Wagtail demo project

This is a demonstration project for the amazing Wagtail CMS.

The demo site is designed to provide examples of common features and recipes to introduce you to Wagtail development. Beyond the code, it will also let you explore the admin/editorial interface of the CMS.

Note that we do not recommend using this project to start your own site - the demo is intended to be a springboard to get you started. Feel free to copy code from the demo into your own project.

Wagtail Features Demonstrated in This Demo

This demo is aimed primarily at developers wanting to learn more about the internals of Wagtail, and assumes you'll be reading its source code. After browsing the features, pay special attention to code we've used for:

  • Dividing a project up into multiple apps
  • Custom content models and "contexts" in the "breads" and "locations" apps
  • A typical weblog in the "blog" app
  • Example of using a "base" app to contain miscellaneous functionality (e.g. Contact Form, About, etc.)
  • "StandardPage" model using mixins borrowed from other apps
  • Example of customizing the Wagtail Admin via wagtail_hooks
  • Example of using the Wagtail "snippets" system to represent bread categories, countries, and ingredients
  • Example of a custom "Galleries" feature that pulls in images used in other content types in the system
  • Example of creating ManyToMany relationships via the Ingredients feature on BreadPage
  • And much more

Document contents

Installation

If you want to see what Wagtail is all about, we suggest trying it out locally in a virtual environment. See Setup with venv.

If you're new to Python and/or Django, we suggest you run this project on a virtual machine using Docker or Vagrant (whichever you're most comfortable with). Both Vagrant and Docker will help resolve common software dependency issues.

Setup with Vagrant

Dependencies

Installation

Once you've installed the necessary dependencies, run the following commands:

git clone https://github.com/wagtail/bakerydemo.git
cd bakerydemo
vagrant up
vagrant ssh
# then, within the SSH session:
./manage.py runserver 0.0.0.0:8000

The demo site will now be accessible at http://localhost:8000/ and the Wagtail admin interface at http://localhost:8000/admin/.

Log into the admin with the credentials admin / changeme.

Use Ctrl+c to stop the local server. To stop the Vagrant environment, run exit then vagrant halt.

Setup with Docker

Dependencies

Installation

Run the following commands:

git clone https://github.com/wagtail/bakerydemo.git --config core.autocrlf=input
cd bakerydemo
docker compose up --build -d

After this command completes and returns to the command prompt, wait 10 more seconds for the database setup to complete. Then run:

docker compose exec app /venv/bin/python manage.py migrate
docker compose exec app /venv/bin/python manage.py load_initial_data

If this fails with a database error, wait 10 more seconds and re-try. Finally, run:

docker compose up

The demo site will now be accessible at http://localhost:8000/ and the Wagtail admin interface at http://localhost:8000/admin/.

Log into the admin with the credentials admin / changeme.

Important: This docker-compose.yml is configured for local testing only, and is not intended for production use.

Debugging

To tail the logs from the Docker containers in real time, run:

docker compose logs -f

Setup with venv

You can run the Wagtail demo locally without setting up Vagrant or Docker and simply use venv, which is the recommended installation approach for Django itself.

Dependencies

  • Python 3.10+
  • venv
  • Optionally, uv as a faster alternative to venv & pip

Installation

On GNU/Linux or macOS (bash):

# Using Python's venv:
python -m venv .venv
# Or using uv:
uv venv .venv
source .venv/bin/activate

On Windows, activate the virtual environment using the appropriate command for your shell:

# PowerShell
.venv\Scripts\Activate.ps1
# Command Prompt (cmd.exe)
.venv\Scripts\activate.bat

Note (PowerShell Execution Policy) If activating with Activate.ps1 fails with an error like “running scripts is disabled on this system”, you can either:

  • use .venv\Scripts\activate.bat in Command Prompt, or
  • allow scripts in PowerShell for your user account: Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

Now we're ready to set up the bakerydemo project itself:

cd ~/dev [or your preferred dev directory]
git clone https://github.com/wagtail/bakerydemo.git
cd bakerydemo
# Using pip:
pip install -r requirements/development.txt
# Or using uv:
uv pip install -r requirements/development.txt

Next, we need to create the files .env and bakerydemo/settings/local.py, which provide a place for local configuration settings that need to be kept outside of version control. No such settings are required for a standard installation, but warnings will be displayed if these files are not present:

cp bakerydemo/settings/local.py.example bakerydemo/settings/local.py
cp .env.example .env
# `cp` is used for bash. Windows Command Prompt uses `copy`

To set up your database and load initial data, run the following commands:

./manage.py migrate
./manage.py load_initial_data
./manage.py runserver

Log into the admin with the credentials admin / changeme.

Next steps

After experimenting with the demo, you may want to create your own site. To do that, run the wagtail start command in your environment of choice. You can find more information in the getting started Wagtail CMS docs.

Contributing

Check out our contributing documentation for our contributing guidelines and docs for common tasks.

Other notes

Local configuration files

The bakerydemo/settings/local.py file can be used to store local Django settings such as database connection details that need to be kept outside of version control.

Additionally, various settings can be controlled through environment variables. The python-dotenv package is used to load these variables from a .env file in the project root.

API demo

The website is configured for API usage in parallel to server-rendered page, using Wagtail’s v2 API and v3 API. For a full headless demo, view the headless branch and bakerydemo-headless.

To get started with the v3 API, access the API dashboard at http://localhost:8000/api/v3-preview/docs/. You can also use the API with the prototype Wagtail CLI. Here is an example with uv:

uv tool install wagtail-cli

export WAGTAIL_CLI_TOKEN=wagtail_C3qhlJUUj75vWvK5bbcb73bZ4JC4cQKWt
export WAGTAIL_CLI_BASE_URL=http://localhost:8000/api/v3-preview

# Check what account your API token corresponds to
wt api whoami
# List pages
wt api pages list
# Fetch one page.
wt api pages get 76
# Create a new page under the homepage, as a draft.
wt api pages create base.StandardPage --parent 60 --title "Demo page"

Note on demo search

Because we can't (easily) use ElasticSearch for this demo, we use wagtail's native DB search. However, native DB search can't search specific fields in our models on a generalized Page query. So for demo purposes ONLY, we hard-code the model names we want to search into search.views, which is not ideal. In production, use ElasticSearch and a simplified search query, per https://docs.wagtail.org/en/stable/topics/search/searching.html.

Sending email from the contact form

The following setting in base.py and production.py ensures that live email is not sent by the demo contact form.

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

In production on your own site, you'll need to change this to:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'

and configure SMTP settings appropriate for your email provider.

Users included in demo data

The demo data includes users with different roles and preferences. You can use these users to quickly test the permission system in Wagtail or how localization is handled in the admin interface.

Username Password Superuser Groups Language Timezone Active API token
admin changeme Yes None undefined undefined Yes wagtail_C3qhlJUUj75vWvK5bbcb73bZ4JC4cQKWt
editor changeme No Editors undefined undefined Yes wagtail_KbX51h5BjfoVDtzQZSziixrFR2R02g9vI
moderator changeme No Moderators undefined undefined Yes wagtail_XeNIQwWz5Uo876IOD6ct3jUUM1o1SdXxk
inactive changeme Yes None undefined undefined No wagtail_3Oo2Tiuz92J63rDsZQMoyKmb2wr0nf9Sf
german changeme Yes None German Europe/Berlin Yes wagtail_AXzzlyovkJ7eqJNDrCxlcaFtbNv0sWVGF (revoked)
arabic changeme Yes None Arabic Asia/Beirut Yes wagtail_Wk5r5jQli3ieyxuAO2gjHK4RnAF00YejP

Ownership of demo content

All content in the demo is public domain. Textual content in this project is either sourced from Wikimedia (Wikipedia for blog posts, Wikibooks for recipes) or consists of lorem ipsum text. All images are from either Wikimedia Commons or other copyright-free sources.

About

Next generation Wagtail demo, born in Reykjavík

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1.1k stars

Watchers

42 watching

Forks

Releases

Packages

Used by

Contributors

Languages