Add random button to listing pages
This commit is contained in:
parent
7fcbbad885
commit
8d724277b0
4 changed files with 19 additions and 3 deletions
|
@ -1,7 +1,5 @@
|
|||
{% extends "common/listing_page.html" %}
|
||||
|
||||
{% load wagtailroutablepage_tags %}
|
||||
|
||||
{% block hero_buttons %}
|
||||
<a class="button is-radiusless" href="{{ page.tag_list_page_url }}" title="View tags"><i class="fas fa-tags" aria-hidden="true"></i></a>
|
||||
{{ block.super }}
|
||||
|
|
|
@ -295,6 +295,13 @@ class BaseListingPage(RoutablePageMixin, BaseContentPage):
|
|||
def feed(self, request: HttpRequest) -> HttpResponse:
|
||||
return redirect("feed", permanent=True)
|
||||
|
||||
@route(r"^random/$")
|
||||
def random(self, request: HttpRequest) -> HttpResponse:
|
||||
page = self.get_listing_pages().order_by("?").first()
|
||||
if page is None:
|
||||
return redirect(self.get_url(request=request), permanent=False)
|
||||
return redirect(page.get_url(request=request), permanent=False)
|
||||
|
||||
|
||||
class ListingPage(BaseListingPage):
|
||||
pass
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
{% extends "common/content_page.html" %}
|
||||
|
||||
{% load wagtailadmin_tags %}
|
||||
{% load wagtailadmin_tags wagtailroutablepage_tags %}
|
||||
|
||||
{% block hero_buttons %}
|
||||
<a class="button is-radiusless" href="{% routablepageurl page 'random' %}" title="View random"><i class="fas fa-dice" aria-hidden="true"></i></a>
|
||||
|
||||
{% if listing_pages.has_previous %}
|
||||
<a class="button is-radiusless" href="{% querystring page=listing_pages.previous_page_number %}" title="Previous page"><i class="fas fa-arrow-left" aria-hidden="true"></i></a>
|
||||
{% endif %}
|
||||
|
|
|
@ -77,3 +77,12 @@ class ListingPageTestCase(TestCase):
|
|||
self.assertEqual(
|
||||
response.context["page"].get_meta_url(), self.page.full_url + "?page=2"
|
||||
)
|
||||
|
||||
def test_random(self) -> None:
|
||||
url = self.page.url + self.page.reverse_subpage("random")
|
||||
with self.assertNumQueries(10):
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, 302)
|
||||
self.assertIn(
|
||||
response.url, [page.get_url() for page in self.page.get_listing_pages()]
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue