From 1928623ea8545029622e3190046515b1b9c96a05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9DNyymix=E2=80=9D?= Date: Fri, 18 Apr 2025 20:10:41 +0300 Subject: [PATCH] Add canonical url --- gallery/views.py | 33 ++++++++++++++++++++++++++++++--- templates/base.html | 3 +++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/gallery/views.py b/gallery/views.py index f7e7db4..4782b13 100644 --- a/gallery/views.py +++ b/gallery/views.py @@ -3,6 +3,7 @@ from django.core.cache import cache from django.core.paginator import Paginator from django.db.models import Count, Q, Sum from django.shortcuts import get_object_or_404, redirect, render +from django.urls import reverse from django.views.generic import DetailView, ListView, TemplateView from .models import Album, Photo, Redir @@ -32,6 +33,18 @@ class AlbumsList(ListView): cache.set(key, queryset, 60 * 5) return queryset + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + page = int(self.request.GET.get('page', 1)) + + # Canonical_url + canonical_url = self.request.build_absolute_uri(reverse('gallery:albums_url')) + if page > 1: + canonical_url += f'?page={page}' + context['canonical_url'] = canonical_url + + return context class AlbumDetail(DetailView): @@ -50,9 +63,16 @@ class AlbumDetail(DetailView): paginator = Paginator(photos, 30) page_obj = paginator.get_page(self.request.GET.get('page')) + # Canonical_url + page = int(self.request.GET.get('page', 1)) + canonical_url = self.request.build_absolute_uri(self.object.get_absolute_url()) + if page > 1: + canonical_url += f'?page={page}' + context.update({ 'photos': page_obj.object_list, - 'page_obj': page_obj + 'page_obj': page_obj, + 'canonical_url': canonical_url, }) return context @@ -75,6 +95,7 @@ class PhotosList(ListView): def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['order'] = self.request.GET.get('order', 'latest') + context['canonical_url'] = self.request.build_absolute_uri(reverse('gallery:photos_url')) return context @@ -101,7 +122,8 @@ class PhotoDetail(DetailView): context = super().get_context_data(**kwargs) context.update({ "next": self.object.get_next(), - "prev": self.object.get_prev() + "prev": self.object.get_prev(), + "canonical_url": self.request.build_absolute_uri(self.object.get_absolute_url()), }) return context @@ -144,7 +166,8 @@ class Search(TemplateView): 'results': page_obj.object_list, 'page_obj': page_obj, 'paginator': paginator, - 'is_paginated': page_obj.has_other_pages() + 'is_paginated': page_obj.has_other_pages(), + 'canonical_url': self.request.build_absolute_uri(reverse('gallery:search_url')) }) return context @@ -152,6 +175,10 @@ class Search(TemplateView): class About(TemplateView): """Static about page.""" template_name = "gallery/about.html" + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['canonical_url'] = self.request.build_absolute_uri(reverse('gallery:about_url')) + return context def redirect_to_album(request, redir_path): diff --git a/templates/base.html b/templates/base.html index 58e427f..c876c04 100644 --- a/templates/base.html +++ b/templates/base.html @@ -7,6 +7,9 @@ {{ site_config.site_head_title }} : {% block title %}{% endblock %} + {% if canonical_url %} + + {% endif %}