How To Prevent Users From Creating Certain Page Types in Wagtail CMS

Oct 25, 2018 · Updated: Jul 12, 2021 · by Tim Kamanin

Sometimes in Wagtail, we have pages that should only have a single instance in the system. Let's say we have a blog that has an index page driven by BlogIndexPage model. We create it once and want to prevent editors from creating a second instance of BlogIndexPage. How do we do that?

Every Wagtail Page model has a handy flag called is_creatable, by default it's set to True. So if we want to prevent a certain type of pages to be creatable via the admin interface, we just need to set is_creatable to True in the page type class.

Thus in our case, with BlogIndexPage we do this:

from wagtail.core.models import Page

class BlogIndexPage(Page):
    is_creatable = False

And now editors can't add BlogIndexPage instances anymore.


The thing is, you might want to add is_creatable = False to many more model classes and it's always hard to keep up with these settings, especially when you want to turn it on for a moment. I came up with the following solution to the problem: I use a global setting to lock/unlock my models:

class BlogIndexPage(Page):
    is_creatable = settings.WAGTAIL_PAGES_IS_CREATABLE

Now, with a single change in settings.py I can set models to be creatable or not:

In settings.py:


The even better idea is to drive this setting via Environment variables, so you don't have to re-deploy every time you want to change the setting. In settings.py I set


Voila! Enjoy Wagtail CMS, it's really cool!

Hey, if you've found this useful, please share the post to help other folks find it:

There's even more:

Subscribe for updates

  • via Twitter: @timonweb
  • old school RSS:
  • or evergreen email ↓ ↓ ↓