diff --git a/gallery/templates/gallery/main.html b/gallery/templates/gallery/main.html
new file mode 100644
index 0000000..9b56b01
--- /dev/null
+++ b/gallery/templates/gallery/main.html
@@ -0,0 +1,79 @@
+{% extends "base.html" %}
+{% load static %}
+{% load image_tags %}
+
+
+{% block title %} Home {% endblock %}
+
+
+{% block parallax %}
+ {% include "./partials/parallax.html" %}
+{% endblock %}
+
+
+{% block content %}
+
+
+ {% load top_tags %}
+ {% random_favorite_photos_portrait 10 as top_portrait_photos %}
+
+ {% if top_portrait_photos %}
+
+
+
+ {% for photo in top_portrait_photos %}
+
+ {% endfor %}
+
+
+
+
+
+
+ {% endif %}
+
+
+
+
+ {% for album in latest_albums %}
+
+
+
+
+
+
+
+
+
+
+ {{ album.photos_in_album }} photos •
+ {{ album.photos_views }} views
+
+
+
+
+
+ {% endfor %}
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/gallery/urls.py b/gallery/urls.py
index 9fa63e2..aa27bf4 100644
--- a/gallery/urls.py
+++ b/gallery/urls.py
@@ -5,7 +5,7 @@ from . import converters, views
app_name = 'gallery'
urlpatterns = [
- path('', views.AlbumsList.as_view(), name='main_url'),
+ path('', views.Main.as_view(), name='main_url'),
path('about/', views.About.as_view(), name='about_url'),
path('search/', views.Search.as_view(), name='search_url'),
path('photostream/', views.PhotosList.as_view(), name='photos_url'),
diff --git a/gallery/views.py b/gallery/views.py
index a45d0bb..a256496 100644
--- a/gallery/views.py
+++ b/gallery/views.py
@@ -1,7 +1,7 @@
from django.conf import settings
from django.core.cache import cache
from django.core.paginator import Paginator
-from django.db.models import Count, Q, Sum
+from django.db.models import Count, F, Q, Sum
from django.http import JsonResponse
from django.shortcuts import get_object_or_404, redirect
from django.urls import reverse
@@ -11,6 +11,18 @@ from django.views.generic import DetailView, ListView, TemplateView
from .models import Album, Photo, Redir
+class Main(TemplateView):
+ """Main homepage."""
+ template_name = "gallery/main.html"
+
+ def get_context_data(self, **kwargs):
+ context = super().get_context_data(**kwargs)
+ context['canonical_url'] = self.request.build_absolute_uri(reverse('gallery:main_url'))
+ context['latest_albums'] = Album.objects.filter(is_public=True).order_by('-album_date')[:6]
+
+ return context
+
+
class AlbumsList(ListView):
"""Displays a paginated list of public albums."""
model = Album
@@ -88,7 +100,8 @@ class PhotosList(ListView):
ordering_options = {
'latest': '-taken_at',
'liked': 'likes',
- 'popular': '-views'
+ 'popular': '-views',
+ 'favorite': '-is_favorite'
}
order = ordering_options.get(self.request.GET.get('order', 'latest'), '-taken_at')
return Photo.objects.filter(album__is_public=True).order_by(order).select_related('album')