Skip to content

Commit 0765203

Browse files
committed
query optimization for homepage scroller
1 parent 64e0997 commit 0765203

2 files changed

Lines changed: 21 additions & 10 deletions

File tree

static/website/templates/index.html

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,27 @@
2727
</script>
2828
<div id="carousel-container">
2929
<div class="carousel">
30-
{% for category in categories %}
30+
{% for item in slider_questions %}
3131
<div>
3232
<div class="thumbnail">
33-
{% with file=category|get_category_image %}
33+
{% with file=item.category|get_category_image %}
3434
{% if file %}
35-
<img src="{% static category|get_category_image %}">
35+
<img src="{% static item.category|get_category_image %}">
3636
{% else %}
37-
<div class="category-title">{{category}}</div>
37+
<div class="category-title">{{item.category}}</div>
3838
{% endif %}
3939
{% endwith %}
40+
4041
<div class="caption">
4142
<small class="category">
42-
{{ category }}
43+
{{ item.category }}
4344
</small>
44-
{% latest_question category %}
45-
<a class="btn btn-xs btn-block btn-success" href="{% url 'website:new_question' %}?category={{ category|urlencode }}">Ask new question</a>
45+
<small class="latest">
46+
<a href="{% url 'website:get_question' item.id %}">{{ item.title }}</a>
47+
</small>
48+
<a class="btn btn-xs btn-block btn-primary" href="{% url 'website:filter' item.category %}">View previous questions</a>
49+
50+
<a class="btn btn-xs btn-block btn-success" href="{% url 'website:new_question' %}?category={{ item.category|urlencode }}">Ask new question</a>
4651
</div>
4752
</div>
4853
</div>

website/views.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from django.shortcuts import render, get_object_or_404
55
from django.template.context_processors import csrf
66
from django.contrib.auth.decorators import login_required
7-
from django.db.models import Q
7+
from django.db.models import Q, OuterRef, Subquery, Max, Count
88
from django.core.mail import EmailMultiAlternatives
99
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
1010
from django.contrib.auth import get_user_model
@@ -17,7 +17,6 @@
1717
from website.templatetags.permission_tags import can_edit, can_hide_delete
1818
from spoken_auth.models import FossCategory
1919
from .sortable import SortableHeader, get_sorted_list, get_field_index
20-
from django.db.models import Count
2120

2221

2322
User = get_user_model()
@@ -32,10 +31,17 @@
3231
def home(request):
3332
questions = Question.objects.filter(status=1).order_by('date_created').reverse()[:100]
3433
active_questions = Question.objects.filter(status=1, last_active__isnull=False).order_by('last_active').reverse()[:100]
34+
35+
subquery = Question.objects.filter(category=OuterRef('category')).values('category').annotate(max_date=Max('date_created')).values('max_date')
36+
slider_questions = Question.objects.filter(
37+
date_created=Subquery(subquery)
38+
).order_by('category')
39+
3540
context = {
3641
'categories': categories,
3742
'questions': questions,
38-
'active_questions':active_questions
43+
'active_questions':active_questions,
44+
'slider_questions': slider_questions
3945
}
4046
return render(request, "website/templates/index.html", context)
4147

0 commit comments

Comments
 (0)