kopia lustrzana https://github.com/wagtail/wagtail
Add `routablepageurl` template tag
It is similar to `pageurl`, but works with `RoutablePage`s. Functions like a hybrid between `reverse` and `pageurl`. For example: {% load wagtailroutablepage_tags %} {% routablepageurl self "feed" %} {% routablepageurl self "archive" 2014 08 14 %} {% routablepageurl self "food" foo="bar" baz="quux" %}pull/538/head
rodzic
f2756ca439
commit
98698ef8d4
|
@ -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" %}
|
||||
|
|
|
@ -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
|
|
@ -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/')
|
||||
|
|
Ładowanie…
Reference in New Issue