X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/83ed4687677954c6411b0ac9e9bdfc9f303251e0..4f65bba054fa88646e07b7e0138ce5786b1519e7:/src/search/views.py diff --git a/src/search/views.py b/src/search/views.py index e06b1cc48..9e3645858 100644 --- a/src/search/views.py +++ b/src/search/views.py @@ -11,6 +11,7 @@ from catalogue.models import Book, Tag from pdcounter.models import Author from picture.models import Picture from search.index import Search, SearchResult, PictureResult +from .forms import SearchFilters from suggest.forms import PublishingSuggestForm import re import json @@ -85,15 +86,19 @@ def hint(request, mozhint=False, param='term'): for author in authors[:limit] ] if len(data) < limit: - data += [ - { - 'label': b.title, - 'author': b.author_unicode(), - 'id': b.id, - 'url': b.get_absolute_url() - } - for b in Book.objects.filter(findable=True, title__iregex='\m' + prefix)[:limit-len(data)] - ] + for b in Book.objects.filter(findable=True, title__iregex='\m' + prefix)[:limit-len(data)]: + author_str = b.author_unicode() + translator = b.translator() + if translator: + author_str += ' (tłum. ' + translator + ')' + data.append( + { + 'label': b.title, + 'author': author_str, + 'id': b.id, + 'url': b.get_absolute_url() + } + ) if mozhint: data = [ @@ -112,8 +117,29 @@ def hint(request, mozhint=False, param='term'): return JsonResponse(data, safe=False) + +@cache.never_cache +def search(request): + filters = SearchFilters(request.GET) + ctx = { + 'title': 'Wynik wyszukiwania', + 'query': filters.data['q'], + 'filters': filters, + } + if filters.is_valid(): + ctx['results'] = filters.results() + for k, v in ctx['results'].items(): + if v: + ctx['hasresults'] = True + break + return render(request, 'search/results.html', ctx) + + @cache.never_cache def main(request): + if request.EXPERIMENTS['layout'].value: + return search(request) + query = request.GET.get('q', '') format = request.GET.get('format') @@ -189,9 +215,9 @@ def main(request): 'genre': genre, }, 'tags': { - 'epoch': Tag.objects.filter(category='epoch'), - 'genre': Tag.objects.filter(category='genre'), - 'kind': Tag.objects.filter(category='kind'), + 'epoch': Tag.objects.filter(category='epoch', for_books=True), + 'genre': Tag.objects.filter(category='genre', for_books=True), + 'kind': Tag.objects.filter(category='kind', for_books=True), }, }) @@ -227,11 +253,11 @@ def search_books(query, lang=None, only_audio=False, only_synchro=False, epoch=N def ensure_exists(r): try: - r.book + if not r.book: + return False except Book.DoesNotExist: return False - print(lang, r.book.language) if lang and r.book.language != lang: return False if only_audio and not r.book.has_mp3_file(): @@ -278,7 +304,8 @@ def search_pictures(query, epoch=None, kind=None, genre=None): def ensure_exists(r): try: - return r.picture + if not r.picture: + return False except Picture.DoesNotExist: return False @@ -289,6 +316,8 @@ def search_pictures(query, epoch=None, kind=None, genre=None): if genre and not r.picture.tags.filter(category='genre', slug=genre).exists(): return False + return True + results = [r for r in results if ensure_exists(r)] return results