Skip to content

Commit dfe15c3

Browse files
committed
backend: Add pagination for blog entries
Related ticket: Instanssi#52
1 parent 2f4f87c commit dfe15c3

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

backend/Instanssi/ext_blog/templates/ext_blog/blog_messages.html

+12
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,23 @@
22
<div id="blog">
33
{% for entry in entries %}
44
<div class="message" id="{{ entry.id }}">
5+
{# TODO These links won't work if entry is not on currently shown page. Fix by adding a separate view. #}
56
<a style="text-decoration: none;" href="#{{ entry.id }}"><h2>{{ entry.title }}</h2></a>
67
<time datetime="{{ entry.date|date:"Y-m-d\TH:i" }}" class="date">{{ entry.date|date:"d.m.Y H:i" }}</time>
78
<div class="content">{{ entry.text|safe }}</div>
89
</div>
910
{% endfor %}
11+
{% if needs_pagination %}
12+
<ul class="pagination">
13+
{% for i in page_range %}
14+
{% if i == page_number %}
15+
<li class="active" aria-label="Nykyinen sivu: {{ i }}/{{ num_pages }}"><a>{{ i }}</a></li>
16+
{% else %}
17+
<li><a href="?p={{ i }}" aria-label="Siirry sivulle: {{ i }}/{{ num_pages }}">{{ i }}</a></li>
18+
{% endif %}
19+
{% endfor %}
20+
</ul>
21+
{% endif %}
1022
</div>
1123
{% else %}
1224
<p>Blogissa ei ole entryjä!</p>
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,25 @@
11
from django import template
2+
from django.core.paginator import Paginator
23

34
from Instanssi.ext_blog.models import BlogEntry
45

56
register = template.Library()
67

78

8-
@register.inclusion_tag("ext_blog/blog_messages.html")
9-
def render_blog(event_id: int, max_posts: int = 10) -> dict:
10-
return {"entries": BlogEntry.get_latest().filter(event_id=event_id)[:max_posts]}
9+
@register.inclusion_tag("ext_blog/blog_messages.html", takes_context=True)
10+
def render_blog(context, event_id: int, max_posts: int = 10) -> dict:
11+
request = context["request"]
12+
page_number = request.GET.get('p', 1) # Default to page 1 if get parameter is missing
13+
# Make sure the page number from the get parameter is a valid integer:
14+
try:
15+
page_number = int(page_number)
16+
except ValueError:
17+
page_number = 1
18+
full_entries_list = BlogEntry.get_latest().filter(event_id=event_id)
19+
paginator = Paginator(full_entries_list, max_posts)
20+
current_page = paginator.get_page(page_number)
21+
entries = current_page.object_list
22+
# We will pass this boolean as extra data to the template for simplicity
23+
# It's used to determine whether to render pagination links or not:
24+
needs_pagination = paginator.count > paginator.per_page
25+
return {"entries": entries, "needs_pagination": needs_pagination, "page_range": paginator.page_range, "page_number": current_page.number, "num_pages": paginator.num_pages}

0 commit comments

Comments
 (0)