redirect to gallery for single tags with no book results
[wolnelektury.git] / src / catalogue / views.py
index 98dafc5..81d0a02 100644 (file)
@@ -108,6 +108,11 @@ def object_list(request, objects, fragments=None, related_tags=None, tags=None,
     categories = split_tags(*related_tag_lists)
 
     objects = list(objects)
+
+    if not objects and len(tags) == 1 and list_type == 'books':
+        if PictureArea.tagged.with_any(tags).exists() or Picture.tagged.with_any(tags).exists():
+            return redirect('tagged_object_list_gallery', '/'.join(tag.url_chunk for tag in tags))
+
     if len(objects) > 3:
         best = random.sample(objects, 3)
     else:
@@ -201,10 +206,7 @@ def theme_list(request, tags, list_type):
         fragments = fragments.filter(Q(book__in=books) | Q(book__ancestor__in=books))
 
     if not fragments and len(tags) == 1 and list_type == 'books':
-        tag = tags[0]
-        if tag.category == 'theme' and (
-                PictureArea.tagged.with_any([tag]).exists() or
-                Picture.tagged.with_any([tag]).exists()):
+        if PictureArea.tagged.with_any(tags).exists() or Picture.tagged.with_any(tags).exists():
             return redirect('tagged_object_list_gallery', '/'.join(tag.url_chunk for tag in tags))
 
     return object_list(request, fragments, tags=tags, list_type=list_type, extra={
@@ -352,7 +354,7 @@ def _no_diacritics_regexp(query):
 
     def repl(m):
         l = m.group()
-        return u"(%s)" % '|'.join(names[l])
+        return u"(?:%s)" % '|'.join(names[l])
 
     return re.sub(u'[%s]' % (u''.join(names.keys())), repl, query)
 
@@ -640,13 +642,14 @@ class CustomPDFFormView(AjaxableFormView):
 
 @ssi_included
 def book_mini(request, pk, with_link=True):
-    book = get_object_or_404(Book, pk=pk)
-    author_str = ", ".join(tag.name for tag in book.tags.filter(category='author'))
+    # book = get_object_or_404(Book, pk=pk)
+    try:
+        book = Book.objects.only('cover_thumb', 'title', 'language', 'slug').get(pk=pk)
+    except Book.DoesNotExist:
+        raise Http404
     return render(request, 'catalogue/book_mini_box.html', {
         'book': book,
-        'author_str': author_str,
-        'with_link': with_link,
-        'show_lang': book.language_code() != settings.LANGUAGE_CODE,
+        'no_link': not with_link,
     })