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 %} +
+ + {{ photo.album.slug }} + +
+ {% endfor %} +
+ + +
+ +
+ {% endif %} + + +
+ + {% for album in latest_albums %} +
+
+ + + + + +
+

+ {{ album }} +

+

+ {{ 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')