Wagtail 2.5 release notes¶
April 24, 2019
What’s new¶
Django 2.2 support¶
This release is compatible with Django 2.2. Compatibility fixes were contributed by Matt Westcott and Andy Babic.
New Markdown shortcuts in rich text¶
Wagtail’s rich text editor now supports using Markdown shortcuts for inline formatting:
**for bold_for italic~for strikethrough (if enabled)`for code (if enabled)
To learn other shortcuts, have a look at the keyboard shortcuts reference.
Other features¶
Added support for customising EditHandler-based forms on a per-request basis (Bertrand Bordage)
Added more informative error message when
|richtextfilter is applied to a non-string value (mukesh5)Automatic search indexing can now be disabled on a per-model basis via the
search_auto_updateattribute (Karl Hobley)Improved diffing of StreamFields when comparing page revisions (Karl Hobley)
Highlight broken links to pages and missing documents in rich text (Brady Moe)
Preserve links when copy-pasting rich text content from Wagtail to other tools (Thibaud Colas)
Rich text to contentstate conversion now prioritises more specific rules, to accommodate
<p>and<br>elements with attributes (Matt Westcott)Added limit image upload size by number of pixels (Thomas Elliott)
Added
manage.py wagtail_update_indexalias to avoid clashes withupdate_indexcommands from other packages (Matt Westcott)Renamed
target_modelargument onPageChooserBlocktopage_type(Loic Teixeira)edit_handlerandpanelscan now be defined on aModelAdmindefinition (Thomas Kremmel)Add Learn Wagtail to third-party tutorials in documentation (Matt Westcott)
Add a Django setting
TAG_LIMITto limit number of tags that can be added to any taggit model (Mani)Added instructions on how to generate urls for
ModelAdminto documentation (LB (Ben Johnston), Andy Babic)Added option to specify a fallback URL on
{% pageurl %}(Arthur Holzner)Add support for more rich text formats, disabled by default:
blockquote,superscript,subscript,strikethrough,code(Md Arifin Ibne Matin)Added
max_count_per_parentoption on page models to limit the number of pages of a given type that can be created under one parent page (Wesley van Lee)StreamFieldfield blocks now accept avalidatorsargument (Tom Usher)Added edit / delete buttons to snippet index and “don’t delete” option to confirmation screen, for consistency with pages (Kevin Howbrook)
Added name attributes to all built-in page action menu items (LB (Ben Johnston))
Added validation on the filter string to the Jinja2 image template tag (Jonny Scholes)
Changed the pages reordering UI toggle to make it easier to find (Katie Locke, Thibaud Colas)
Added support for rich text link rewrite handlers for
externalandemaillinks (Md Arifin Ibne Matin)Clarify installation instructions in documentation, especially regarding virtual environments. (Naomi Morduch Toubman)
Bug fixes¶
Set
SERVER_PORTto 443 inPage.dummy_request()for HTTPS sites (Sergey Fedoseev)Include port number in
Hostheader ofPage.dummy_request()(Sergey Fedoseev)Validation error messages in
InlinePanelno longer count towardsmax_numwhen disabling the ‘add’ button (Todd Dembrey, Thibaud Colas)Rich text to contentstate conversion now ignores stray closing tags (frmdstryr)
Escape backslashes in
postgres_searchqueries (Hammy Goonan)Parent page link in page chooser search results no longer navigates away (Asanka Lihiniyagoda, Sævar Öfjörð Magnússon)
routablepageurltag now correctly omits domain part when multiple sites exist at the same root (Gassan Gousseinov)Added missing collection column specifier on document listing template (Sergey Fedoseev)
Page Copy will now also copy ParentalManyToMany field relations (LB (Ben Johnston))
Admin HTML header now includes correct language code (Matt Westcott)
Unclear error message when saving image after focal point edit (Hugo van den Berg)
Increase max length on
Embed.thumbnail_urlto 255 characters (Kevin Howbrook)send_mailnow correctly uses thehtml_messagekwarg for HTML messages (Tiago Requeijo)Page copying no longer allowed if page model has reached its
max_count(Andy Babic)Don’t show page type on page chooser button when multiple types are allowed (Thijs Kramer)
Make sure page chooser search results correspond to the latest search by cancelling previous requests (Esper Kuijs)
Inform user when moving a page from one parent to another where there is an already existing page with the same slug (Casper Timmers)
User add/edit forms now support form widgets with JS/CSS media (Damian Grinwis)
Rich text processing now preserves non-breaking spaces instead of converting them to normal spaces (Wesley van Lee)
Prevent autocomplete dropdowns from appearing over date choosers on Chrome (Kevin Howbrook)
Prevent crash when logging HTTP errors on Cloudflare cache purging (Kevin Howbrook)
Prevent rich text editor crash when filtering copy-pasted content and the last block is to be removed, e.g. unsupported image (Thibaud Colas)
Removing rich text links / documents now also works when the text selection is backwards (Thibaud Colas)
Prevent the rich text editor from crashing when copy-paste filtering removes all of its content (Thibaud Colas)
Page chooser now respects custom
get_admin_display_titlemethods on parent page and breadcrumb (Haydn Greatnews)Added consistent whitespace around sortable table headings (Matt Westcott)
Moved locale names for Chinese (Simplified) and Chinese (Traditional) to
zh_Hansandzh_Hant(Matt Westcott)
Upgrade considerations¶
EditHandler.bind_to_model and EditHandler.bind_to_instance deprecated¶
The internal EditHandler methods bind_to_model and bind_to_instance have been deprecated, in favour of a new combined bind_to method which accepts model, instance, request and form as optional keyword arguments. Any user code which calls EditHandler.bind_to_model(model) should be updated to use EditHandler.bind_to(model=model) instead; any user code which calls EditHandler.bind_to_instance(instance, request, form) should be updated to use EditHandler.bind_to(instance=instance, request=request, form=form).
Changes to admin pagination helpers¶
A number of changes have been made to pagination handling within the Wagtail admin; these are internal API changes, but may affect applications and third-party packages that add new paginated object listings, including chooser modals, to the admin. The paginate function in wagtail.utils.pagination has been deprecated in favour of the django.core.paginator.Paginator.get_page method introduced in Django 2.0 - a call such as:
from wagtail.utils.pagination import paginate
paginator, page = paginate(request, object_list, per_page=25)
should be replaced with:
from django.core.paginator import Paginator
paginator = Paginator(object_list, per_page=25)
page = paginator.get_page(request.GET.get('p'))
Additionally, the is_ajax flag on the template wagtailadmin/shared/pagination_nav.html has been deprecated in favour of a new template wagtailadmin/shared/ajax_pagination_nav.html:
{% include "wagtailadmin/shared/pagination_nav.html" with items=page_obj is_ajax=1 %}
should become:
{% include "wagtailadmin/shared/ajax_pagination_nav.html" with items=page_obj %}
New rich text formats¶
Wagtail now has built-in support for new rich text formats, disabled by default:
blockquote, using theblockquoteDraft.js block type, saved as a<blockquote>tag.superscript, using theSUPERSCRIPTDraft.js inline style, saved as a<sup>tag.subscript, using theSUBSCRIPTDraft.js inline style, saved as a<sub>tag.strikethrough, using theSTRIKETHROUGHDraft.js inline style, saved as a<s>tag.code, using theCODEDraft.js inline style, saved as a<code>tag.
Projects already using those exact Draft.js type and HTML tag combinations can safely replace their feature definitions with the new built-ins. Projects that use the same feature identifier can keep their existing feature definitions as overrides. Finally, if the Draft.js types / HTML tags are used but with a different combination, do not enable the new feature definitions to avoid conflicts in storage or editor behaviour.
register_link_type and register_embed_type methods for rich text tag rewriting have changed¶
The FeatureRegistry.register_link_type and FeatureRegistry.register_embed_type methods, which define how links and embedded media in rich text are converted to HTML, now accept a handler class. Previously, they were passed an identifier string and a rewrite function. For details of updating your code to the new convention, see Rewrite handlers.
Chinese language locales changed to zh_Hans and zh_Hant¶
The translations for Chinese (Simplified) and Chinese (Traditional) are now available under the locale names zh_Hans and zh_Hant respectively, rather than zh_CN and zh_TW. Projects that currently use the old names for the LANGUAGE_CODE setting may need to update the settings file to use the new names.