Skip to content

Commit d0e2475

Browse files
authored
Added pagination to homepage (#79)
1 parent 20bca6b commit d0e2475

2 files changed

Lines changed: 109 additions & 12 deletions

File tree

static/website/templates/index.html

Lines changed: 83 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,22 @@ <h3 align="center">Answers</h3>
9191
<div class="panel panel-default">
9292
<div class="panel-heading">
9393
<ul class="nav nav-tabs">
94-
<li class="active"><a data-toggle="tab" href="#recent_question">Recent questions</a></li>
95-
<li><a data-toggle="tab" href="#most_active">Most active questions</a></li>
96-
{% if show_spam_list %}<li><a data-toggle="tab" href="#marked_as_spam">Marked as spam</a></li>{% endif %}
94+
<li class="{% if current_tab == 'recent_question' %}active{% endif %}">
95+
<a data-toggle="tab" href="#recent_question" data-tab="recent_question">Recent questions</a>
96+
</li>
97+
<li class="{% if current_tab == 'most_active' %}active{% endif %}">
98+
<a data-toggle="tab" href="#most_active" data-tab="most_active">Most active questions</a>
99+
</li>
100+
{% if show_spam_list %}
101+
<li class="{% if current_tab == 'marked_as_spam' %}active{% endif %}">
102+
<a data-toggle="tab" href="#marked_as_spam" data-tab="marked_as_spam">Marked as spam</a>
103+
</li>
104+
{% endif %}
97105
</ul>
98106
</div>
99107
<div class="panel-body">
100108
<div class="tab-content">
101-
<div id="recent_question" class="tab-pane fade in active">
109+
<div id="recent_question" class="tab-pane fade {% if current_tab == 'recent_question' %}in active{% endif %}">
102110
<table id = "listTable" class="tablesorter-blue">
103111
<thead>
104112
<tr>
@@ -181,8 +189,31 @@ <h3 align="center">Answers</h3>
181189
{% endfor %}
182190
</tbody>
183191
</table>
192+
<div class="text-center" style="margin-top: 15px;">
193+
<ul class="pagination">
194+
{% if questions.has_previous %}
195+
<li><a href="?recent_page=1&tab=recent_question">&laquo; First</a></li>
196+
<li><a href="?recent_page={{ questions.previous_page_number }}&tab=recent_question">Previous</a></li>
197+
{% else %}
198+
<li class="disabled"><span>&laquo; First</span></li>
199+
<li class="disabled"><span>Previous</span></li>
200+
{% endif %}
201+
202+
<li class="active">
203+
<span>Page {{ questions.number }} of {{ questions.paginator.num_pages }}</span>
204+
</li>
205+
206+
{% if questions.has_next %}
207+
<li><a href="?recent_page={{ questions.next_page_number }}&tab=recent_question">Next</a></li>
208+
<li><a href="?recent_page={{ questions.paginator.num_pages }}&tab=recent_question">Last &raquo;</a></li>
209+
{% else %}
210+
<li class="disabled"><span>Next</span></li>
211+
<li class="disabled"><span>Last &raquo;</span></li>
212+
{% endif %}
213+
</ul>
214+
</div>
184215
</div>
185-
<div id="most_active" class="tab-pane fade">
216+
<div id="most_active" class="tab-pane fade {% if current_tab == 'most_active' %}in active{% endif %}">
186217

187218
<table id = "activelistTable" class="tablesorter-blue">
188219
<thead>
@@ -279,10 +310,33 @@ <h3 align="center">Answers</h3>
279310
{% endfor %}
280311
</tbody>
281312
</table>
313+
<div class="text-center" style="margin-top: 15px;">
314+
<ul class="pagination">
315+
{% if active_questions.has_previous %}
316+
<li><a href="?active_page=1&tab=most_active">&laquo; First</a></li>
317+
<li><a href="?active_page={{ active_questions.previous_page_number }}&tab=most_active">Previous</a></li>
318+
{% else %}
319+
<li class="disabled"><span>&laquo; First</span></li>
320+
<li class="disabled"><span>Previous</span></li>
321+
{% endif %}
322+
323+
<li class="active">
324+
<span>Page {{ active_questions.number }} of {{ active_questions.paginator.num_pages }}</span>
325+
</li>
326+
327+
{% if active_questions.has_next %}
328+
<li><a href="?active_page={{ active_questions.next_page_number }}&tab=most_active">Next</a></li>
329+
<li><a href="?active_page={{ active_questions.paginator.num_pages }}&tab=most_active">Last &raquo;</a></li>
330+
{% else %}
331+
<li class="disabled"><span>Next</span></li>
332+
<li class="disabled"><span>Last &raquo;</span></li>
333+
{% endif %}
334+
</ul>
335+
</div>
282336
</div>
283337
<!-- spam questions -->
284338
{% if show_spam_list %}
285-
<div id="marked_as_spam" class="tab-pane fade">
339+
<div id="marked_as_spam" class="tab-pane fade {% if current_tab == 'marked_as_spam' %}in active{% endif %}">
286340

287341
<table id = "spamlistTable" class="tablesorter-blue">
288342
<thead>
@@ -379,6 +433,29 @@ <h3 align="center">Answers</h3>
379433
{% endfor %}
380434
</tbody>
381435
</table>
436+
<div class="text-center" style="margin-top: 15px;">
437+
<ul class="pagination">
438+
{% if spam_questions.has_previous %}
439+
<li><a href="?spam_page=1&tab=marked_as_spam">&laquo; First</a></li>
440+
<li><a href="?spam_page={{ spam_questions.previous_page_number }}&tab=marked_as_spam">Previous</a></li>
441+
{% else %}
442+
<li class="disabled"><span>&laquo; First</span></li>
443+
<li class="disabled"><span>Previous</span></li>
444+
{% endif %}
445+
446+
<li class="active">
447+
<span>Page {{ spam_questions.number }} of {{ spam_questions.paginator.num_pages }}</span>
448+
</li>
449+
450+
{% if spam_questions.has_next %}
451+
<li><a href="?spam_page={{ spam_questions.next_page_number }}&tab=marked_as_spam">Next</a></li>
452+
<li><a href="?spam_page={{ spam_questions.paginator.num_pages }}&tab=marked_as_spam">Last &raquo;</a></li>
453+
{% else %}
454+
<li class="disabled"><span>Next</span></li>
455+
<li class="disabled"><span>Last &raquo;</span></li>
456+
{% endif %}
457+
</ul>
458+
</div>
382459
</div>
383460
{% endif %}
384461
</div>

website/views.py

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,16 +130,35 @@ def _get_home_category_question_map(categories, slider_questions):
130130
def home(request):
131131
base_queryset = Question.objects.annotate(answer_count=Count('answer'))
132132

133-
questions = _get_home_questions(base_queryset)
134-
active_questions = _get_home_active_questions(base_queryset)
133+
questions_full = _get_home_questions(base_queryset)
134+
active_questions_full = _get_home_active_questions(base_queryset)
135135
slider_questions = _get_home_slider_questions(base_queryset)
136136

137-
spam_questions = []
137+
spam_questions = None
138138
show_spam_list = is_administrator(request.user) or is_forumsadmin(request.user)
139139
if show_spam_list:
140-
spam_questions = _get_home_spam_questions(base_queryset)
140+
spam_questions_full = _get_home_spam_questions(base_queryset)
141+
# spam paginator
142+
spam_paginator = Paginator(spam_questions_full, 10)
143+
spam_page_number = request.GET.get('spam_page')
144+
spam_questions = spam_paginator.get_page(spam_page_number)
145+
146+
# paginate active questions
147+
recent_paginator = Paginator(questions_full, 10)
148+
active_paginator = Paginator(active_questions_full, 10)
149+
150+
151+
recent_page_number = request.GET.get('recent_page')
152+
active_page_number = request.GET.get('active_page')
153+
141154

142-
all_questions = list(questions) + list(active_questions) + list(slider_questions) + list(spam_questions)
155+
questions = recent_paginator.get_page(recent_page_number)
156+
active_questions = active_paginator.get_page(active_page_number)
157+
158+
if spam_questions is None:
159+
all_questions = list(questions.object_list) + list(active_questions.object_list) + list(slider_questions)
160+
else:
161+
all_questions = list(questions.object_list) + list(active_questions.object_list) + list(slider_questions) + list(spam_questions.object_list)
143162
uids = set()
144163
for q in all_questions:
145164
uids.add(q.uid)
@@ -161,7 +180,8 @@ def home(request):
161180
'active_questions': active_questions,
162181
'spam_questions': spam_questions,
163182
'category_question_map': category_question_map,
164-
'show_spam_list': show_spam_list
183+
'show_spam_list': show_spam_list,
184+
'current_tab': request.GET.get('tab', 'recent_question'),
165185
}
166186
return render(request, "website/templates/index.html", context)
167187

0 commit comments

Comments
 (0)