Add search

This commit is contained in:
Nyymix 2025-04-05 10:10:44 +03:00
parent 333ed61b6e
commit f3ec438305
4 changed files with 76 additions and 1 deletions

View file

@ -0,0 +1,35 @@
{% extends "base_dark.html" %}
{% load static %}
<!-- Title -->
{% block title %} Gallery : Search {% endblock %}
<!-- Parallax -->
{% block parallax %}
{% include "./partials/parallax.html" %}
{% endblock %}
<!-- Content -->
{% block content %}
<div class="uk-grid-small uk-child-width-1-2@s uk-child-width-1-3@m" uk-grid="masonry: true">
{% for album in results %}
<div>
<div class="uk-card uk-card-default">
<div class="uk-card-media-top">
<a href="{{ album.get_absolute_url }}">
<img src="{{ album.cover_url }}" alt="{{ album.name }}">
</a>
</div>
<div class="uk-overlay uk-overlay-primary uk-position-bottom uk-padding-small">
<h3 class="uk-card-title"><a href="{{ album.get_absolute_url }}">{{ album }}</a></h3>
<p>{{ album.album_date|date:"d.m.Y" }} &bull; {{ album.photos_in_album }} photos</p>
</div>
</div>
</div>
{% endfor %}
</div>
{% include "./partials/pagination.html" %}
{% endblock %}

View file

@ -11,6 +11,7 @@ urlpatterns = [
path('', views.AlbumsList.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'),
path('albums/<path:album_slug>/<filename:photo_slug>', views.PhotoDetail.as_view(), name='photo_url'),
path('albums/<path:album_slug>/', views.AlbumDetail.as_view(), name='album_url'),

View file

@ -1,6 +1,7 @@
from django.conf import settings
from django.core.paginator import Paginator
from django.shortcuts import get_object_or_404, redirect
from django.db.models import Q
from django.shortcuts import get_object_or_404, redirect, render
from django.views.generic import DetailView, ListView, TemplateView
from .models import Album, Photo, Redir
@ -97,6 +98,33 @@ class About(TemplateView):
return context
class Search(TemplateView):
template_name = "gallery/search.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
query = self.request.GET.get('q', '').strip()
context['query'] = query
results = Album.objects.none()
if query:
results = Album.objects.filter(
Q(is_public=True),
Q(name__icontains=query) |
Q(location__place__icontains=query) |
Q(location__city__name__icontains=query)
).order_by('-album_date').distinct()
paginator = Paginator(results, 30)
page_number = self.request.GET.get('page')
page_obj = paginator.get_page(page_number)
context['results'] = page_obj.object_list
context['page_obj'] = page_obj
context['paginator'] = paginator
context['is_paginated'] = page_obj.has_other_pages()
return context
def redirect_to_album(request, redir_path):
redir = get_object_or_404(Redir, path=redir_path)
return redirect('gallery:album_url', album_slug=redir.album.slug)