NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #5051 most downloaded on PyPI
A Django content management system.
Last release 1 months ago
25 Aug 2026
Release timing varies
gaps range from 9 days to 2 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
13 years old
300 releases · first in 2014
Added API documentation for panels
Changes from 3.0rc2:
use_json_field argument on StreamField required until Wagtail 5.0Update release notes and wagtail updatemodulepaths command to cover rename from wagtail.core.utils to wagtail.coreutils
Changes from rc1:
wagtail updatemodulepaths command to cover rename from wagtail.core.utils to wagtail.coreutilsOne column per quarter.
Phase out special-purpose panel types (StreamFieldPanel, RichTextFieldPanel, ImageChooserPanel, DocumentChooserPanel, PageChooserPanel, SnippetChooser
StreamFieldPanel, RichTextFieldPanel, ImageChooserPanel, DocumentChooserPanel, PageChooserPanel, SnippetChooserPanel) in favour of FieldPanel (Matt Westcott):focus-visible for cross-browser consistency (Paarth Agarwal)modelAdmin (Serafeim Papastefanos)README.md logo to work for GitHub dark mode (Paarth Agarwal)If-Modified-Since header in sendfile_streaming_backend which was only used by IE (Mariusz Felisiak)StreamField to use JSONField to store data, rather than TextField (Sage Abdullah)content_json TextField with content JSONField in PageRevision (Sage Abdullah)replace_text management command (Sage Abdullah)data_json TextField with data JSONField in BaseLogEntry (Sage Abdullah)page_description to the Page model, to provide help text for a given page type (Kalob Taulien, Thibaud Colas, Matt Westcott)trimmed attribute to all blocktrans tags, so spacing is more reliable in translated strings (Harris Lapiroff)ModelAdmin to manage Tags (Abdulmajeed Isa)BASE_URL (undocumented) to WAGTAILADMIN_BASE_URL and add to documentation, BASE_URL will be removed in a future release (Sandil Ranasinghe)AbstractEmailForm (Jake Howard)WAGTAILIMAGES_RENDITION_STORAGE setting to allow an alternative image rendition storage (Heather White)wagtail_update_image_renditions management command to regenerate image renditions or purge all existing renditions (Hitansh Shah, Onno Timmerman, Damian Moore)PageQuerySet.specific() to reduce memory consumption (Andy Babic)TAG_SPACES_ALLOWED is True or False (Abdulmajeed Isa)AbstractFormSubmission's form_data to use JSONField to store form submissions (Jake Howard)simple_translations ensure that the user is redirected to the page edit view when submitting for a single locale (Mitchel Cabuloy)Form pages, ensure that all added fields are correctly shown in the preview (Joshua Munn)WAGTAILDOCS_CONTENT_TYPES & WAGTAILDOCS_INLINE_CONTENT_TYPES ensure that the filename is correctly set in the Content-Disposition header so that saving the files will use the correct filename (John-Scott Atlakson)aria-haspopup="menu" for all sidebar menu items that have sub-menus (LB (Ben Johnston))aria-expanded is always explicitly set as a string in sidebar (LB (Ben Johnston))role="main" attributes on <main> elements causing HTML validation issues (Luis Espinoza)lang attributes to <html> elements (James Ray)thumb_col_header_text is correctly used by ThumbnailMixin within ModelAdmin as the column header label (Kyle J. Roux)exclude_fields_in_copy (John-Scott Atlakson)IntegrityError when publishing pages with translatable Orderables that were copied without being published (Kalob Taulien, Dan Braghis)GenericRelation when copying pages (John-Scott Atlakson)Fix: Ensure the upgrade notification request for the latest release, which can be disabled via the WAGTAIL_ENABLE_UPDATE_CHECK sends the referrer orig
WAGTAIL_ENABLE_UPDATE_CHECK sends the referrer origin with strict-origin-when-cross-origin (Karl Hobley)Fix: Update django-treebeard dependency to 4.5.1 or above (Serafeim Papastefanos)
FormPagesListView in wagtail.contrib.forms to avoid undefined locale variable when subclassing (Dan Braghis)exclude_fields_in_copy (John-Scott Atlakson)IntegrityError when publishing pages with translatable Orderables that were copied without being published (Kalob Taulien, Dan Braghis)GenericRelation when copying pages (John-Scott Atlakson)Fix: Ensure that correct sidebar submenus open when labels use non-Latin alphabets (Matt Westcott)
USE_THOUSAND_SEPARATOR (Dennis McGregor)Fix: default_app_config deprecations for Django >= 3.2 (Tibor Leupold)
page_slug_changed signal for pages (Andy Babic)StreamField, StreamBlock, and ListBlock which will load all sub-blocks initially collapsed (Matt Westcott)alias_of field to the pages API (Dmitrii Faiazov)search_fields (LB (Ben Johnston))admin/expanding_formset.js has been renamed to admin/expanding-formset.js (LB (Ben Johnston))wagtail_site template tag for Jinja2 (Vladimir Tananko)default_app_config deprecations for Django >= 3.2 (Tibor Leupold)first_published_date and last_published_date (Dan Braghis)WAGTAILADMIN_USER_LOGIN_FORM are now rendered correctly (Michael Karamuth)ol items are not cut off (Khanh Hoang)3.2, 4.0
3.7, 3.8, 3.9, 3.10
2.15 LTS
3.0, 3.1, 3.2
3.6, 3.7, 3.8, 3.9, 3.10
Fix: default_app_config deprecations for Django >= 3.2 (Tibor Leupold)
Changes from 2.16rc1:
Full 2.16 changelog:
page_slug_changed signal for pages (Andy Babic)StreamField, StreamBlock, and ListBlock which will load all sub-blocks initially collapsed (Matt Westcott)alias_of field to the pages API (Dmitrii Faiazov)search_fields (LB (Ben Johnston))admin/expanding_formset.js has been renamed to admin/expanding-formset.js (LB (Ben Johnston))wagtail_site template tag for Jinja2 (Vladimir Tananko)default_app_config deprecations for Django >= 3.2 (Tibor Leupold)first_published_date and last_published_date (Dan Braghis)WAGTAILADMIN_USER_LOGIN_FORM are now rendered correctly (Michael Karamuth)ol items are not cut off (Khanh Hoang)Fix: default_app_config deprecations for Django >= 3.2 (Tibor Leupold)
page_slug_changed signal for pages (Andy Babic)StreamField, StreamBlock, and ListBlock which will load all sub-blocks initially collapsed (Matt Westcott)alias_of field to the pages API (Dmitrii Faiazov)search_fields (LB (Ben Johnston))admin/expanding_formset.js has been renamed to admin/expanding-formset.js (LB (Ben Johnston))wagtail_site template tag for Jinja2 (Vladimir Tananko)default_app_config deprecations for Django >= 3.2 (Tibor Leupold)first_published_date and last_published_date (Dan Braghis)WAGTAILADMIN_USER_LOGIN_FORM are now rendered correctly (Michael Karamuth)ol items are not cut off (Khanh Hoang)Fix: Ensure the upgrade notification request for the latest release, which can be disabled via the WAGTAIL_ENABLE_UPDATE_CHECK sends the referrer orig
WAGTAIL_ENABLE_UPDATE_CHECK sends the referrer origin with strict-origin-when-cross-origin (Karl Hobley)Fix: Allow bulk publishing of pages without revisions (Andy Chosak)
IntegrityError when publishing pages with translatable Orderables that were copied without being published (Kalob Taulien, Dan Braghis)GenericRelation when copying pages (John-Scott Atlakson)Fix: Fix issue where invalid bulk action URLs would incorrectly trigger a server error (500) instead of a valid not found (404) (Ihor Marhitych)
USE_THOUSAND_SEPARATOR (Dennis McGregor)Fix: Implement correct check for SQLite installations without full-text search support (Matt Westcott)
Fix: CVE-2022-21683 - Comment reply notifications sent to incorrect users (Ihor Marhitych, Jacob Topp-Mugglestone)
checkbox_aria_label is used correctly in the Bulk Actions checkboxes (Vu Pham)Fix: Fix syntax when logging image rendition generation (Jake Howard)
csrf_token issue when using the Approve or Unlock buttons on pages on the Wagtail admin home (Matt Westcott)Add initial support for Django 4.0 deprecations (Matt Westcott, Jochen Wersdörfer)
TypedTableBlock block type for StreamField, for building tables with mixed data types (Matt Westcott, Coen van der Kamp, Scott Cranfill. Sponsored by YouGov)min_num / max_num options on ListBlock (Matt Westcott)contrib.simple_translation (Mitchel Cabuloy)background_position_style property to renditions (Karl Hobley)wagtail.copy_for_translation log action type (Karl Hobley)'listing_results' (Matt Westcott)request.is_ajax() usage in Documents, Image and Snippet views (Matt Westcott)page_title and page_subtitle are used consistently (Matt Westcott)non_field_errors rendering in Workflow action modal (LB (Ben Johnston))get_image_model and get_document_model at import time (Matt Westcott)ExcelDateFormatter to wagtail.admin.views.mixins so that dates in Excel exports will appear in the locale's SHORT_DATETIME_FORMAT (Andrew Stone)label_format attribute to customise the label shown for a collapsed StructBlock (Matt Westcott)ImageFileMixin to extract shared file handling methods from AbstractImage and AbstractRendition (Fabien Le Frapper)before_delete_page and register_permissions examples to Hooks documentation (Jane Liu, Daniel Fairhead)nl_NL to nl (Loïc Teixeira, Coen van der Kamp)RoutablePageMixin (Nick Smith)autocomplete, a separate method which performs partial matching on specific autocomplete fields. This is useful for suggesting pages to the user in real-time as they type their query. (Karl Hobley, Matt Westcott)request.preview_mode so that template rendering can vary based on preview mode (Andy Chosak)blocks.MultipleChoiceBlock, forms.CheckboxSelectMultiple and ArrayField checkboxes will now stack instead of display inline to align with all other checkboxes fields (Seb Brown)RichText so ConfigException is not thrown (Alex Tomkins)default_auto_field in postgres_search AppConfig (Nick Moreton)EmailNotificationMixin and send_notification should only send emails to active users (Bryan Williams)gettext_lazy to ModelAdmin built in view titles so that language settings are correctly used (Matt Westcott)edit_handler usage by adding missing bind_to call to PreviewOnEdit view (Stefan Hammer)comments to wagtail_admin_comments to avoid conflicts with third-party commenting apps (Matt Westcott)MultiFieldPanel (Jérôme Lebleu)Revised deprecation timeline for database search backends; existing sites will continue to use the wagtail.search.backends.db backend unless they 'opt…
Changes from 2.15rc1:
wagtail.search.backends.db backend unless they 'opt in' to the new wagtail.search.backends.database backend via WAGTAILSEARCH_BACKENDS; the new backend will become default in 2.17Add initial support for Django 4.0 deprecations (Matt Westcott, Jochen Wersdörfer)
TypedTableBlock block type for StreamField, for building tables with mixed data types (Matt Westcott, Coen van der Kamp, Scott Cranfill. Sponsored by YouGov)min_num / max_num options on ListBlock (Matt Westcott)contrib.simple_translation (Mitchel Cabuloy)background_position_style property to renditions (Karl Hobley)wagtail.copy_for_translation log action type (Karl Hobley)'listing_results' (Matt Westcott)request.is_ajax() usage in Documents, Image and Snippet views (Matt Westcott)page_title and page_subtitle are used consistently (Matt Westcott)non_field_errors rendering in Workflow action modal (LB (Ben Johnston))get_image_model and get_document_model at import time (Matt Westcott)ExcelDateFormatter to wagtail.admin.views.mixins so that dates in Excel exports will appear in the locale's SHORT_DATETIME_FORMAT (Andrew Stone)label_format attribute to customise the label shown for a collapsed StructBlock (Matt Westcott)ImageFileMixin to extract shared file handling methods from AbstractImage and AbstractRendition (Fabien Le Frapper)before_delete_page and register_permissions examples to Hooks documentation (Jane Liu, Daniel Fairhead)nl_NL to nl (Loïc Teixeira, Coen van der Kamp)RoutablePageMixin (Nick Smith)autocomplete, a separate method which performs partial matching on specific autocomplete fields. This is useful for suggesting pages to the user in real-time as they type their query. (Karl Hobley, Matt Westcott)request.preview_mode so that template rendering can vary based on preview mode (Andy Chosak)blocks.MultipleChoiceBlock, forms.CheckboxSelectMultiple and ArrayField checkboxes will now stack instead of display inline to align with all other checkboxes fields (Seb Brown)RichText so ConfigException is not thrown (Alex Tomkins)default_auto_field in postgres_search AppConfig (Nick Moreton)EmailNotificationMixin and send_notification should only send emails to active users (Bryan Williams)gettext_lazy to ModelAdmin built in view titles so that language settings are correctly used (Matt Westcott)edit_handler usage by adding missing bind_to call to PreviewOnEdit view (Stefan Hammer)comments to wagtail_admin_comments to avoid conflicts with third-party commenting apps (Matt Westcott)MultiFieldPanel (Jérôme Lebleu)Fix: Allow relation name used for admin commenting to be overridden to avoid conflicts with third-party commenting apps (Matt Westcott)
Fix: Prevent failure on Twitter embeds and others which return cache_age as a string (Matt Westcott)
Added ancestor_of API filter (Jaap Roes)
ancestor_of API filter (Jaap Roes)full_url property to image renditions (Shreyash Srivastava)WAGTAIL_WORKFLOW_ENABLED setting for enabling / disabling moderation workflows globally (Matt Westcott)max_width and max_height on EmbedBlock (Petr Dlouhý)DATETIME_FORMAT for localization in templates (Andrew Stone)construct_explorer_page_queryset hook is now taken into account again by the page explorer API (Andre Fonseca)APPEND_SLASH setting (Tidjani Dia)block.super to remaining extra_js & extra_css blocks (Andrew Stone)editor and features arguments on RichTextField are preserved by clone() (Daniel Fairhead)Added ancestor_of API filter (Jaap Roes)
ancestor_of API filter (Jaap Roes)full_url property to image renditions (Shreyash Srivastava)WAGTAIL_WORKFLOW_ENABLED setting for enabling / disabling moderation workflows globally (Matt Westcott)max_width and max_height on EmbedBlock (Petr Dlouhý)DATETIME_FORMAT for localization in templates (Andrew Stone)construct_explorer_page_queryset hook is now taken into account again by the page explorer API (Andre Fonseca)APPEND_SLASH setting (Tidjani Dia)block.super to remaining extra_js & extra_css blocks (Andrew Stone)editor and features arguments on RichTextField are preserved by clone() (Daniel Fairhead)Fix: Allow relation name used for admin commenting to be overridden to avoid conflicts with third-party commenting apps (Matt Westcott)
Fix: Prevent embed thumbnail_url migration from failing on URLs longer than 200 characters (Matt Westcott)
Fix: Prevent error when using rich text on views where commenting is unavailable (Jacob Topp-Mugglestone)
CVE-2021-32681 - fix improper escaping of HTML ('Cross-site Scripting') in Wagtail StreamField blocks (Karen Tracey, Matt Westcott)
CVE-2021-32681 - fix improper escaping of HTML ('Cross-site Scripting') in Wagtail StreamField blocks (Karen Tracey, Matt Westcott)
Fix: Ensure comment notification checkbox is fully hidden when commenting is disabled (Karl Hobley)
New StreamField implementation with performance and functionality improvements (Matt Westcott, Karl Hobley)
wagtail.contrib.simple_translation (Coen van der Kamp)min_num, max_num and block_counts arguments directly to StreamField (Haydn Greatnews, Matt Westcott)__year lookup in Elasticsearch queries (Seb Brown)type(), not_type(), exact_type() and not_exact_type() methods on PageQuerySet (Andy Babic)Page.get_specific() and added the copy_attrs_exclude option (Andy Babic)PageQueryset.specific(defer=True) to only perform a single database query (Andy Babic)PageQueryset.defer_streamfields() (Andy Babic)PageQuerySet.defer_streamfields() to improve efficiency in a few key places (Andy Babic)register_setting, register_settings_menu_item to use SVG icons (Thibaud Colas)SearchArea subclasses in register_admin_search_area (Thibaud Colas)wagtail.reorder page audit log action (Storm Heg)get_settings template tag now supports specifying the variable name with {% get_settings as var %} (Samir Shah){% pageurl %} fallback to be a direct URL or an object with a get_absolute_url method (Andy Babic)blank keyword argument (Matt Westcott){% include_block with context %} now passes local variables into the block template (Jonny Scholes)New StreamField implementation with performance and functionality improvements (Matt Westcott, Karl Hobley)
wagtail.contrib.simple_translation (Coen van der Kamp)min_num, max_num and block_counts arguments directly to StreamField (Haydn Greatnews, Matt Westcott)__year lookup in Elasticsearch queries (Seb Brown)type(), not_type(), exact_type() and not_exact_type() methods on PageQuerySet (Andy Babic)Page.get_specific() and added the copy_attrs_exclude option (Andy Babic)PageQueryset.specific(defer=True) to only perform a single database query (Andy Babic)PageQueryset.defer_streamfields() (Andy Babic)PageQuerySet.defer_streamfields() to improve efficiency in a few key places (Andy Babic)register_setting, register_settings_menu_item to use SVG icons (Thibaud Colas)SearchArea subclasses in register_admin_search_area (Thibaud Colas)wagtail.reorder page audit log action (Storm Heg)get_settings template tag now supports specifying the variable name with {% get_settings as var %} (Samir Shah){% pageurl %} fallback to be a direct URL or an object with a get_absolute_url method (Andy Babic)blank keyword argument (Matt Westcott){% include_block with context %} now passes local variables into the block template (Jonny Scholes)New StreamField implementation with performance and functionality improvements (Matt Westcott, Karl Hobley)
wagtail.contrib.simple_translation (Coen van der Kamp)min_num, max_num and block_counts arguments directly to StreamField (Haydn Greatnews, Matt Westcott)__year lookup in Elasticsearch queries (Seb Brown)type(), not_type(), exact_type() and not_exact_type() methods on PageQuerySet (Andy Babic)Page.get_specific() and added the copy_attrs_exclude option (Andy Babic)PageQueryset.specific(defer=True) to only perform a single database query (Andy Babic)PageQueryset.defer_streamfields() (Andy Babic)PageQuerySet.defer_streamfields() to improve efficiency in a few key places (Andy Babic)register_setting, register_settings_menu_item to use SVG icons (Thibaud Colas)SearchArea subclasses in register_admin_search_area (Thibaud Colas)wagtail.reorder page audit log action (Storm Heg)get_settings template tag now supports specifying the variable name with {% get_settings as var %} (Samir Shah){% pageurl %} fallback to be a direct URL or an object with a get_absolute_url method (Andy Babic)blank keyword argument (Matt Westcott){% include_block with context %} now passes local variables into the block template (Jonny Scholes)New StreamField implementation with performance and functionality improvements (Matt Westcott, Karl Hobley)
wagtail.contrib.simple_translation (Coen van der Kamp)min_num, max_num and block_counts arguments directly to StreamField (Haydn Greatnews, Matt Westcott)__year lookup in Elasticsearch queries (Seb Brown)type(), not_type(), exact_type() and not_exact_type() methods on PageQuerySet (Andy Babic)Page.get_specific() and added the copy_attrs_exclude option (Andy Babic)PageQueryset.specific(defer=True) to only perform a single database query (Andy Babic)PageQueryset.defer_streamfields() (Andy Babic)PageQuerySet.defer_streamfields() to improve efficiency in a few key places (Andy Babic)register_setting, register_settings_menu_item to use SVG icons (Thibaud Colas)SearchArea subclasses in register_admin_search_area (Thibaud Colas)wagtail.reorder page audit log action (Storm Heg)get_settings template tag now supports specifying the variable name with {% get_settings as var %} (Samir Shah){% pageurl %} fallback to be a direct URL or an object with a get_absolute_url method (Andy Babic)blank keyword argument (Matt Westcott){% include_block with context %} now passes local variables into the block template (Jonny Scholes)Fix: Prevent embed thumbnail_url migration from failing on URLs longer than 200 characters (Matt Westcott)
CVE-2021-32681 - fix improper escaping of HTML ('Cross-site Scripting') in Wagtail StreamField blocks (Karen Tracey, Matt Westcott)
CVE-2021-32681 - fix improper escaping of HTML ('Cross-site Scripting') in Wagtail StreamField blocks (Karen Tracey, Matt Westcott)
Fix: CVE-2021-29434 - fix improper validation of URLs ('Cross-site Scripting') in rich text fields (Kevin Breen, Matt Westcott)
Fix: Un-pin django-treebeard following upstream fix for migration issue (Matt Westcott)
ClusterableModel on copy_for_translation (Karl Hobley)Pin django-treebeard to <4.5 to prevent migration conflicts (Matt Westcott)
Fix: Ensure aliases are published when the source page is published (Karl Hobley)
manage.py dumpdata with no arguments (Matt Westcott)Added a distinct 'choose' permission for images and documents (Robert Rollins)
WAGTAILIMAGES_IMAGE_FORM_BASE and WAGTAILDOCS_DOCUMENT_FORM_BASE settings to customise the forms for images and documents (Dan Braghis)register_page_action_menu_item and register_snippet_action_menu_item to skip registering an item (Vadim Karpenko)blank=False (Matt Westcott)Page.specific_deferred property for accessing specific page instance without up-front database queries (Andy Babic)Added a distinct 'choose' permission for images and documents (Robert Rollins)
WAGTAILIMAGES_IMAGE_FORM_BASE and WAGTAILDOCS_DOCUMENT_FORM_BASE settings to customise the forms for images and documents (Dan Braghis)register_page_action_menu_item and register_snippet_action_menu_item to skip registering an item (Vadim Karpenko)blank=False (Matt Westcott)Page.specific_deferred property for accessing specific page instance without up-front database queries (Andy Babic)Fix: Update Pillow dependency to allow 9.x (Rizwan Mansuri)
CVE-2021-32681 - fix improper escaping of HTML ('Cross-site Scripting') in Wagtail StreamField blocks (Karen Tracey, Matt Westcott)
CVE-2021-32681 - fix improper escaping of HTML ('Cross-site Scripting') in Wagtail StreamField blocks (Karen Tracey, Matt Westcott)
CVE-2021-29434 - fix improper validation of URLs ('Cross-site Scripting') in rich text fields (Kevin Breen, Matt Westcott)
CVE-2021-29434 - fix improper validation of URLs ('Cross-site Scripting') in rich text fields (Kevin Breen, Matt Westcott)
Fix: Un-pin django-treebeard following upstream fix for migration issue (Matt Westcott)
ClusterableModel on copy_for_translation (Karl Hobley)Pin django-treebeard to <4.5 to prevent migration conflicts (Matt Westcott)
Fix: Prevent delete button showing on collection / workflow edit views when delete permission is absent (Helder Correia)
Fix: Updated project template migrations to ensure that initial homepage creation runs before addition of locale field (Dan Braghis)
LANGUAGES / WAGTAIL_CONTENT_LANGUAGES settings (Andreas Morgenstern)locale / translation_of API filters to be used in combination with search (Matt Westcott)create_log_entries_from_revisions when checking publish state on a revision that cannot be restored (Kristin Riebe)Add custom finder to support Instagram oEmbed API (Luis Nell)
Locale.get_active and .localized (Matt Westcott)get_supported_language_variant returning a language variant not in LANGUAGES (Matt Westcott)Fix: Ensure that cached wagtail_site_root_paths structures from older Wagtail versions are invalidated (Sævar Öfjörð Magnússon)
wagtail_site_root_paths structures from older Wagtail versions are invalidated (Sævar Öfjörð Magnússon)WAGTAIL_CONTENT_LANGUAGES is active (Matt Westcott)Add support for multi-lingual content (Karl Hobley)
fix_tree method with the ability to non-destructively fix path issues and add a --full option to apply path fixes (Matt Westcott)before_edit_snippet, before_create_snippet and before_delete_snippet hooks and documentation (Karl Hobley. Sponsored by the Mozilla Foundation)register_snippet_listing_buttons and construct_snippet_listing_buttons hooks and documentation (Karl Hobley. Sponsored by the Mozilla Foundation)wagtail --version to available Wagtail CLI commands (Kalob Taulien)hooks.register_temporarily utility function for testing hooks (Karl Hobley. Sponsored by the Mozilla Foundation)unidecode and use anyascii in for Unicode to ASCII conversion (Robbie Mackay)render helper to RoutablePageMixin to support serving template responses according to Wagtail conventions (Andy Babic)content-type and content-disposition configurable via WAGTAILDOCS_CONTENT_TYPES and WAGTAILDOCS_INLINE_CONTENT_TYPES (Matt Westcott)BASE_URL setting is now converted to a string, if it isn't already, when constructing API URLs (thenewguy)WAGTAIL_DOCS_EXTENSIONS is set (Meghana Bhange)django-admin command in place of django-admin.py (minusf)register_snippet_action_menu_item and construct_snippet_action_menu hooks to modify the actions available when creating / editing a snippet (Karl Hobley)generate_signature and verify_signature functions into wagtail.images.utils (Noah H)bulk_to_python on all structural StreamField block types (Matt Westcott)GroupCollectionPermission (Jim Jazwiecki)prepopulated_fields for wagtail.contrib.modeladmin (David Bramwell)classname keyword argument on basic StreamField blocks to form_classname (Meghana Bhange)WAGTAILFRONTENDCACHE_LANGUAGES was being interpreted incorrectly. It now accepts a list of strings, as documented (Karl Hobley)edit_handler bind order in ModelAdmin views and fix duplicate form instance creation (Jérôme Lebleu)get_admin_display_title methods (Saptak Sengupta)Page.copy() now raises an error if the page being copied is unsaved (Anton Zhyltsou)Page.copy() now triggers a page_published if the copied page is live (Anton Zhyltsou)URLS setting can now take a string on its own instead of a list (Sævar Öfjörð Magnússon)Add support for multi-lingual content (Karl Hobley)
fix_tree method with the ability to non-destructively fix path issues and add a --full option to apply path fixes (Matt Westcott)before_edit_snippet, before_create_snippet and before_delete_snippet hooks and documentation (Karl Hobley. Sponsored by the Mozilla Foundation)register_snippet_listing_buttons and construct_snippet_listing_buttons hooks and documentation (Karl Hobley. Sponsored by the Mozilla Foundation)wagtail --version to available Wagtail CLI commands (Kalob Taulien)hooks.register_temporarily utility function for testing hooks (Karl Hobley. Sponsored by the Mozilla Foundation)unidecode and use anyascii in for Unicode to ASCII conversion (Robbie Mackay)render helper to RoutablePageMixin to support serving template responses according to Wagtail conventions (Andy Babic)content-type and content-disposition configurable via WAGTAILDOCS_CONTENT_TYPES and WAGTAILDOCS_INLINE_CONTENT_TYPES (Matt Westcott)BASE_URL setting is now converted to a string, if it isn't already, when constructing API URLs (thenewguy)WAGTAIL_DOCS_EXTENSIONS is set (Meghana Bhange)django-admin command in place of django-admin.py (minusf)register_snippet_action_menu_item and construct_snippet_action_menu hooks to modify the actions available when creating / editing a snippet (Karl Hobley)generate_signature and verify_signature functions into wagtail.images.utils (Noah H)bulk_to_python on all structural StreamField block types (Matt Westcott)GroupCollectionPermission (Jim Jazwiecki)prepopulated_fields for wagtail.contrib.modeladmin (David Bramwell)classname keyword argument on basic StreamField blocks to form_classname (Meghana Bhange)WAGTAILFRONTENDCACHE_LANGUAGES was being interpreted incorrectly. It now accepts a list of strings, as documented (Karl Hobley)edit_handler bind order in ModelAdmin views and fix duplicate form instance creation (Jérôme Lebleu)get_admin_display_title methods (Saptak Sengupta)Page.copy() now raises an error if the page being copied is unsaved (Anton Zhyltsou)Page.copy() now triggers a page_published if the copied page is live (Anton Zhyltsou)URLS setting can now take a string on its own instead of a list (Sævar Öfjörð Magnússon)Fix: Avoid use of icon class name on userbar icon to prevent clashes with front-end styles (Karran Besen)
icon class name on userbar icon to prevent clashes with front-end styles (Karran Besen)create_log_entries_from_revisions now handles revisions that cannot be restored due to foreign key constraints (Matt Westcott)Fix: Prevent create_log_entries_from_revisions command from failing when page model classes are missing (Dan Braghis)
create_log_entries_from_revisions command from failing when page model classes are missing (Dan Braghis)username field (Vyacheslav Matyukhin)USE_TZ is false (Matt Westcott)Deprecate use of unidecode within form builder field names (Michael van Tellingen, LB (Ben Johnston))
webpquality and format-webp-lossless image filters and WAGTAILIMAGES_WEBP_QUALITY setting (Nikolay Lukyanov)next_url keyword argument on register_page_listing_buttons and register_page_listing_more_buttons hooks (Ascani Carlo, Matt Westcott, LB (Ben Johnston))AbstractEmailForm will use SHORT_DATETIME_FORMAT and SHORT_DATE_FORMAT Django settings to format date/time values in email (Haydn Greatnews)AbstractEmailForm now has a separate method (render_email) to build up email content on submission emails (Haydn Greatnews)pre_page_move and post_page_move signals (Andy Babic)after_publish_page, before_publish_page, after_unpublish_page & before_unpublish_page hooks (Jonatas Baldin, Coen van der Kamp)page_url shortcut to improve how page URLs can be accessed from site settings in Django templates (Andy Babic)Site object, so that index page and Site switcher will be sorted consistently (Coen van der Kamp, Tim Leguijt)branding_logo block (Meteor0id)alt property to ImageRenditionField api representation (Liam Mullens)purge_revisions management command to purge old page revisions (Jacob Topp-Mugglestone, Tom Dyson)Page views (Caitlin White, Coen van der Kamp)form_classname on ListBlock & StreamBlock (LB (Ben Johnston))Rustface for image feature detection (Neal Todd)PageQuerySet (Timothy Bautista)add_redirect static method to Redirect class for programmatic redirect creation (Brylie Christopher Oxley, Lacey Williams Henschel)wagtail.contrib.redirects (LB (Ben Johnston))bulk_delete page permission is no longer required to move pages, even if those pages have children (Robert Rollins, LB (Ben Johnston))after_edit_snippet, after_create_snippet and after_delete_snippet hooks and documentation (Kalob Taulien)gulp-sass with gulp-dart-sass to improve core development across different platforms (Thibaud Colas)wagtail.contrib.legacy.richtext (Coen van der Kamp, Dan Braghis)WAGTAIL_TIME_FORMAT setting (Jacob Topp-Mugglestone)WAGTAILADMIN_RICH_TEXT_EDITORS (Gassan Gousseinov)EditHandler without a children attribute (Seb Brown)Page.objects.specific now gracefully handles pages with missing specific records (Andy Babic)AbstractEmailForm saved submission fields are now aligned with the email content fields, form.cleaned_data will be used instead of form.fields (Haydn Greatnews)role="table" from TableBlock output (Thibaud Colas)FieldRowPanel is used inside a MultiFieldPanel (Jérôme Lebleu).annotate_score()) when using specific models in page query (Dan Bentley)RichTextField & RichTextBlock search index content (Timothy Bautista)Site.site_name blank values to avoid different values for no name (Coen van der Kamp)wagtail.contrib.sitemaps no longer depends on SiteMiddleware (Matt Westcott)unique_together constraints (Matt Westcott)Add missing SVG icons for optional rich text features (Dan Braghis)
Fixes from 2.10rc1:
has_changed detection on StreamField, to allow non-linear workflows to continue working (Jacob Topp-Mugglestone)SubmissionsListView into models.py files for use in form builder (Matt Westcott)Deprecate use of unidecode within form builder field names (Michael van Tellingen, LB (Ben Johnston))
webpquality and format-webp-lossless image filters and WAGTAILIMAGES_WEBP_QUALITY setting (Nikolay Lukyanov)next_url keyword argument on register_page_listing_buttons and register_page_listing_more_buttons hooks (Ascani Carlo, Matt Westcott, LB (Ben Johnston))AbstractEmailForm will use SHORT_DATETIME_FORMAT and SHORT_DATE_FORMAT Django settings to format date/time values in email (Haydn Greatnews)AbstractEmailForm now has a separate method (render_email) to build up email content on submission emails (Haydn Greatnews)pre_page_move and post_page_move signals (Andy Babic)after_publish_page, before_publish_page, after_unpublish_page & before_unpublish_page hooks (Jonatas Baldin, Coen van der Kamp)page_url shortcut to improve how page URLs can be accessed from site settings in Django templates (Andy Babic)Site object, so that index page and Site switcher will be sorted consistently (Coen van der Kamp, Tim Leguijt)branding_logo block (Meteor0id)alt property to ImageRenditionField api representation (Liam Mullens)purge_revisions management command to purge old page revisions (Jacob Topp-Mugglestone, Tom Dyson)Page views (Caitlin White, Coen van der Kamp)form_classname on ListBlock & StreamBlock (LB (Ben Johnston))Rustface for image feature detection (Neal Todd)PageQuerySet (Timothy Bautista)add_redirect static method to Redirect class for programmatic redirect creation (Brylie Christopher Oxley, Lacey Williams Henschel)wagtail.contrib.redirects (LB (Ben Johnston))bulk_delete page permission is no longer required to move pages, even if those pages have children (Robert Rollins, LB (Ben Johnston))after_edit_snippet, after_create_snippet and after_delete_snippet hooks and documentation (Kalob Taulien)gulp-sass with gulp-dart-sass to improve core development across different platforms (Thibaud Colas)wagtail.contrib.legacy.richtext (Coen van der Kamp, Dan Braghis)WAGTAIL_TIME_FORMAT setting (Jacob Topp-Mugglestone)WAGTAILADMIN_RICH_TEXT_EDITORS (Gassan Gousseinov)EditHandler without a children attribute (Seb Brown)Page.objects.specific now gracefully handles pages with missing specific records (Andy Babic)AbstractEmailForm saved submission fields are now aligned with the email content fields, form.cleaned_data will be used instead of form.fields (Haydn Greatnews)role="table" from TableBlock output (Thibaud Colas)FieldRowPanel is used inside a MultiFieldPanel (Jérôme Lebleu).annotate_score()) when using specific models in page query (Dan Bentley)RichTextField & RichTextBlock search index content (Timothy Bautista)Site.site_name blank values to avoid different values for no name (Coen van der Kamp)wagtail.contrib.sitemaps no longer depends on SiteMiddleware (Matt Westcott)unique_together constraints (Matt Westcott)CVE-2020-15118 - prevent HTML injection through form field help text (Timothy Bautista, Matt Westcott)
CVE-2020-15118 - prevent HTML injection through form field help text (Timothy Bautista, Matt Westcott)
Fix: Prevent startup failure when wagtail.contrib.sitemaps is in INSTALLED_APPS (Matt Westcott)
wagtail.contrib.sitemaps is in INSTALLED_APPS (Matt Westcott)Fix: Fix incorrect method name in SiteMiddleware deprecation warning (LB (Ben Johnston))
wagtail.contrib.sitemaps no longer depends on SiteMiddleware (Matt Westcott)Fix: CVE-2020-11037 - avoid potential timing attack on password-protected private pages (Thibaud Colas)
MultipleChoiceBlock block type for StreamField (James O'Toole)widget keyword argument (James O'Toole)WAGTAIL_ALLOW_UNICODE_SLUGS (Arkadiusz Michał Ryś)wagtail_serve URL route can now be omitted for headless sites (Storm Heg)preview_modes to an empty list (Casper Timmers)ugettext / ungettext calls with gettext / ngettext (Mohamed Feddad)bulk_to_python if defined (Andy Chosak)select_related attribute to site settings to enable more efficient fetching of foreign key values (Andy Babic)blank=False (Matt Westcott){% image ... as var %} now clears the context variable when passed None as an image (Maylon Pedroso)refresh_index method on Elasticsearch no longer fails (Lars van de Kerkhof)scope attribute to table headers in TableBlock output (Quadric).delete() method on the default Page.objects manager (Nick Smith)exclude_fields_in_copy on Page models will now work for for modelcluster parental / many to many relations (LB (Ben Johnston))main, header and footer elements in the admin page layout (Mitchel Cabuloy)Replaced deprecated ugettext / ungettext calls with gettext / ngettext (Mohamed Feddad)
MultipleChoiceBlock block type for StreamField (James O'Toole)widget keyword argument (James O'Toole)WAGTAIL_ALLOW_UNICODE_SLUGS (Arkadiusz Michał Ryś)wagtail_serve URL route can now be omitted for headless sites (Storm Heg)preview_modes to an empty list (Casper Timmers)ugettext / ungettext calls with gettext / ngettext (Mohamed Feddad)bulk_to_python if defined (Andy Chosak)select_related attribute to site settings to enable more efficient fetching of foreign key values (Andy Babic)blank=False (Matt Westcott){% image ... as var %} now clears the context variable when passed None as an image (Maylon Pedroso)refresh_index method on Elasticsearch no longer fails (Lars van de Kerkhof)scope attribute to table headers in TableBlock output (Quadric).delete() method on the default Page.objects manager (Nick Smith)exclude_fields_in_copy on Page models will now work for for modelcluster parental / many to many relations (LB (Ben Johnston))main, header and footer elements in the admin page layout (Mitchel Cabuloy)Your coding agent can read these notes before it upgrades. Set up the MCP server →