0
0
mirror of https://github.com/wagtail/wagtail.git synced 2024-12-01 11:41:20 +01:00
wagtail/docs/reference/contrib/routablepage.rst

95 lines
2.9 KiB
ReStructuredText
Raw Normal View History

.. _routable_page_mixin:
2015-05-03 12:43:57 +02:00
=====================
``RoutablePageMixin``
=====================
2014-07-14 16:09:22 +02:00
.. module:: wagtail.contrib.wagtailroutablepage
2015-04-08 14:51:29 +02:00
The ``RoutablePageMixin`` mixin provides a convenient way for a page to respond on multiple sub-URLs with different views. For example, a blog section on a site might provide several different types of index page at URLs like ``/blog/2013/06/``, ``/blog/authors/bob/``, ``/blog/tagged/python/``, all served by the same page instance.
2015-04-08 14:51:29 +02:00
A ``Page`` using ``RoutablePageMixin`` exists within the page tree like any other page, but URL paths underneath it are checked against a list of patterns. If none of the patterns match, control is passed to subpages as usual (or failing that, a 404 error is thrown).
2014-07-14 16:09:22 +02:00
The basics
==========
2015-04-27 15:14:35 +02:00
To use ``RoutablePageMixin``, you need to make your class inherit from both :class:`wagtail.contrib.wagtailroutablepage.models.RoutablePageMixin` and :class:`wagtail.wagtailcore.models.Page`, then define some view methods and decorate them with ``wagtail.contrib.wagtailroutablepage.models.route``.
2014-07-14 16:09:22 +02:00
Here's an example of an ``EventPage`` with three views:
2014-07-14 16:09:22 +02:00
.. code-block:: python
from wagtail.wagtailcore.models import Page
2015-04-08 14:51:29 +02:00
from wagtail.contrib.wagtailroutablepage.models import RoutablePageMixin, route
2014-07-14 16:09:22 +02:00
class EventPage(RoutablePageMixin, Page):
2015-04-08 14:51:29 +02:00
...
2014-07-14 16:09:22 +02:00
2015-04-08 14:51:29 +02:00
@route(r'^$')
2014-07-14 16:09:22 +02:00
def current_events(self, request):
"""
View function for the current events page
"""
...
2015-04-08 14:51:29 +02:00
@route(r'^past/$')
2014-07-14 16:09:22 +02:00
def past_events(self, request):
"""
2014-08-19 11:51:52 +02:00
View function for the past events page
2014-07-14 16:09:22 +02:00
"""
...
2015-04-08 14:51:29 +02:00
@route(r'^year/(\d+)/$')
def events_for_year(self, request, year):
2014-07-14 16:09:22 +02:00
"""
View function for the events for year page
"""
...
The ``RoutablePageMixin`` class
===============================
2014-07-14 16:09:22 +02:00
.. automodule:: wagtail.contrib.wagtailroutablepage.models
.. autoclass:: RoutablePageMixin
2014-07-14 16:09:22 +02:00
2015-04-08 14:51:29 +02:00
.. automethod:: get_subpage_urls
2014-07-14 16:09:22 +02:00
.. automethod:: resolve_subpage
Example:
.. code-block:: python
view, args, kwargs = page.resolve_subpage('/past/')
2014-07-14 16:09:22 +02:00
response = view(request, *args, **kwargs)
.. automethod:: reverse_subpage
Example:
.. code-block:: python
url = page.url + page.reverse_subpage('events_for_year', kwargs={'year': '2014'})
2014-08-18 10:18:15 +02:00
.. _routablepageurl_template_tag:
The ``routablepageurl`` template tag
====================================
.. currentmodule:: wagtail.contrib.wagtailroutablepage.templatetags.wagtailroutablepage_tags
.. autofunction:: routablepageurl
Example:
.. code-block:: html+django
{% load wagtailroutablepage_tags %}
{% routablepageurl self "feed" %}
{% routablepageurl self "archive" 2014 08 14 %}
{% routablepageurl self "food" foo="bar" baz="quux" %}