Merge pull request #538 from takeflight/feature/routable-page-tags

Add `routablepageurl` template tag
pull/515/merge
Karl Hobley 2014-08-18 09:06:49 +01:00
commit 9d59182a94
4 zmienionych plików z 75 dodań i 2 usunięć

Wyświetl plik

@ -86,3 +86,19 @@ The ``RoutablePage`` class
.. code-block:: python
url = page.url + page.reverse_subpage('events_for_year', args=('2014', ))
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" %}

Wyświetl plik

@ -0,0 +1,24 @@
from django import template
register = template.Library()
@register.simple_tag(takes_context=True)
def routablepageurl(context, page, url_name, *args, **kwargs):
"""
``routablepageurl`` is similar to ``pageurl``, but works with
``RoutablePage``\s. It behaves like a hybrid between the built-in
``reverse``, and ``pageurl`` from Wagtail.
``page`` is the RoutablePage that URLs will be generated from.
``url_name`` is a URL name defined in ``page.subpage_urls``.
Positional arguments and keyword arguments should be passed as normal
positional arguments and keyword arguments.
"""
request = context['request']
base_url = page.relative_url(request.site)
routed_url = page.reverse_subpage(url_name, args=args, kwargs=kwargs)
return base_url + routed_url

Wyświetl plik

@ -1,7 +1,8 @@
from django.test import TestCase
from django.test import TestCase, RequestFactory
from wagtail.wagtailcore.models import Page
from wagtail.wagtailcore.models import Page, Site
from wagtail.tests.models import RoutablePageTest, routable_page_external_view
from wagtail.contrib.wagtailroutablepage.templatetags.wagtailroutablepage_tags import routablepageurl
class TestRoutablePage(TestCase):
@ -80,3 +81,35 @@ class TestRoutablePage(TestCase):
response = self.client.get(self.routable_page.url + 'external/joe-bloggs/')
self.assertContains(response, "EXTERNAL VIEW: joe-bloggs")
class TestRoutablePageTemplateTag(TestRoutablePage):
def setUp(self):
super(TestRoutablePageTemplateTag, self).setUp()
self.rf = RequestFactory()
self.request = self.rf.get(self.routable_page.url)
self.request.site = Site.find_for_request(self.request)
self.context = {'request': self.request}
def test_templatetag_reverse_main_view(self):
url = routablepageurl(self.context, self.routable_page,
'main')
self.assertEqual(url, self.routable_page.url)
def test_templatetag_reverse_archive_by_year_view(self):
url = routablepageurl(self.context, self.routable_page,
'archive_by_year', '2014')
self.assertEqual(url, self.routable_page.url + 'archive/year/2014/')
def test_templatetag_reverse_archive_by_author_view(self):
url = routablepageurl(self.context, self.routable_page,
'archive_by_author', author_slug='joe-bloggs')
self.assertEqual(url, self.routable_page.url + 'archive/author/joe-bloggs/')
def test_templatetag_reverse_external_view(self):
url = routablepageurl(self.context, self.routable_page,
'external_view', 'joe-bloggs')
self.assertEqual(url, self.routable_page.url + 'external/joe-bloggs/')