========================= Wagtail 0.4 release notes ========================= Whats new ========= Private Pages ~~~~~~~~~~~~~ Wagtail now supports password protecting pages on the frontend allowing sections of your website to be made private. :ref:`private_pages` Python 3 support ~~~~~~~~~~~~~~~~ Wagtail now supports Python 3.2, 3.3 and 3.4. Scheduled publishing ~~~~~~~~~~~~~~~~~~~~ Editors can now schedule pages to be published or unpublished at specified times. A new management command has been added (:ref:`publish_scheduled_pages`) to publish pages that have been scheduled by an Editor. Search on QuerySet with Elasticsearch ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Its now possible to perform searches with Elasticsearch on ``PageQuerySet`` objects: >>> from wagtail.wagtailcore.models import Page >>> Page.objects.live().descendant_of(events_index).search("Hello") [, ] Sitemap generation ~~~~~~~~~~~~~~~~~~ A new module has been added (``wagtail.contrib.wagtailsitemaps``) which produces XML sitemaps for Wagtail sites. :ref:`sitemap_generation` Front-end cache invalidation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A new module has been added (``wagtail.contrib.wagtailfrontendcache``) which invalidates pages in a frontend cache when they are updated or deleted in Wagtail. :ref:`frontend_cache_purging` Notification preferences ~~~~~~~~~~~~~~~~~~~~~~~~ Users can now decide which notifications they recieve from Wagtail using a new "Notification preferences" section located in the account settings. Minor features ~~~~~~~~~~~~~~ Core ---- * Any extra arguments given to ``Page.serve`` are now passed through to ``get_context`` and ``get_template`` * Added ``in_menu`` and ``not_in_menu`` methods to ``PageQuerySet`` * Added ``search`` method to ``PageQuerySet`` * Added ``get_next_siblings`` and ``get_prev_siblings`` to ``Page`` * Added ``page_published`` signal * Added ``copy`` method to ``Page`` to allow copying of pages * Added ``construct_whitelister_element_rules`` hook for customising the HTML whitelist used when saving ``RichText`` fields * Support for setting a ``subpage_types`` property on ``Page`` models, to define which page types are allowed as subpages Admin ----- * Removed the "More" section from the menu * Added pagination to page listings * Added a new datetime picker widget * Updated hallo.js to version 1.0.4 * Aesthetic improvements to preview experience * Login screen redirects to dashboard if user is already logged in * Snippets are now ordered alphabetically * Added ``init_new_page`` signal Search ------ * Added a new way to configure searchable/filterable fields on models * Added ``get_indexed_objects`` allowing developers to customise which objects get added to the search index * Major refactor of Elasticsearch backend * Use ``match`` instead of ``query_string`` queries * Fields are now indexed in Elasticsearch with their correct type * Filter fields are no longer included in '_all' * Fields with partial matching are now indexed together into '_partials' Images ------ * Added ``original`` as a resizing rule supported by the ``{% image %}`` tag * ``image`` tag now accepts extra keyword arguments to be output as attributes on the img tag * Added an ``attrs`` property to image rendition objects to output ``src``, ``width``, ``height`` and ``alt`` attributes all in one go Other ----- * Added styleguide (mainly for wagtail developers) Bug fixes ~~~~~~~~~ * Animated GIFs are now coalesced before resizing * Wand backend clones images before modifying them * Admin breadcrumb now positioned correctly on mobile * Page chooser breadcrumb now updates the chooser modal instead of linking to Explorer * Embeds - Fixed crash when no HTML field is sent back from the embed provider * Multiple sites with same hostname but different ports are now allowed * No longer possible to create multiple sites with ``is_default_site = True`` Backwards incompatible changes ============================== ElasticUtils replaced with elasticsearch-py ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you are using the elasticsearch backend, you must install the ``elasticsearch`` module into your environment. .. note:: If you are using an older version of Elasticsearch (< 1.0) you must install ``elasticsearch`` version 0.4.x. Deprecated features =================== Template tag libraries renamed ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The following template tag libraries have been renamed: * ``pageurl`` => ``wagtailcore_tags`` * ``rich_text`` => ``wagtailcore_tags`` * ``embed_filters`` => ``wagtailembeds_tags`` * ``image_tags`` => ``wagtailimages_tags`` The old names will continue to work, but output a ``DeprecationWarning`` - you are advised to update any ``{% load %}`` tags in your templates to refer to the new names. New search field configuration format ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ``indexed_fields`` is now deprecated and has been replaced by a new search field configuration format called ``search_fields``. See :ref:`wagtailsearch_for_python_developers` for how to define a ``search_fields`` property on your models. ``Page.route`` method should now return a ``RouteResult`` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Previously, the ``route`` method called ``serve`` and returned an ``HttpResponse`` object. This has now been split up so ``serve`` is called separately and ``route`` must now return a RouteResult object. If you are overriding ``Page.route`` on any of your page models, you will need to update the method to return a ``RouteResult`` object. The old method of returning an ``HttpResponse`` will continue to work, but this will throw a ``DeprecationWarning`` and bypass the ``before_serve_page`` hook, which means in particular that :ref:`private_pages` will not work on those page types. See :ref:`overriding_route_method`. Wagtailadmins ``hooks`` module has moved to wagtailcore ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If you use any ``wagtail_hooks.py`` files in your project, you may have an import like: ``from wagtail.wagtailadmin import hooks`` Change this to: ``from wagtail.wagtailcore import hooks`` Miscellaneous ~~~~~~~~~~~~~ * ``Page.show_as_mode`` replaced with ``Page.serve_preview`` * ``Page.get_page_modes`` method replaced with ``Page.preview_modes`` property * ``Page.get_other_siblings`` replaced with ``Page.get_siblings(inclusive=False)``