コード例 #1
0
ファイル: views.py プロジェクト: jumasheff/wolnelektury
def catalogue(request, as_json=False):
    common_categories = ('author',)
    split_categories = ('epoch', 'genre', 'kind')

    categories = split_tags(
        get_top_level_related_tags(categories=common_categories),
        models.Tag.objects.usage_for_model(
            models.Fragment, counts=True).filter(category='theme'),
        models.Tag.objects.usage_for_model(
            Picture, counts=True).filter(category__in=common_categories),
        models.Tag.objects.usage_for_model(
            PictureArea, counts=True).filter(
            category='theme')
    )
    book_categories = split_tags(
        get_top_level_related_tags(categories=split_categories)
        )
    picture_categories = split_tags(
        models.Tag.objects.usage_for_model(
            Picture, counts=True).filter(
            category__in=split_categories),
        )

    collections = models.Collection.objects.all()

    def render_tag_list(tags):
        return render_to_string('catalogue/tag_list.html', tag_list(tags))

    def render_split(with_books, with_pictures):
        ctx = {}
        if with_books:
            ctx['books'] = render_tag_list(with_books)
        if with_pictures:
            ctx['pictures'] = render_tag_list(with_pictures)
        return render_to_string('catalogue/tag_list_split.html', ctx)

    output = {}
    output['theme'] = render_tag_list(categories.get('theme', []))
    for category in common_categories:
        output[category] = render_tag_list(categories.get(category, []))
    for category in split_categories:
        output[category] = render_split(
            book_categories.get(category, []),
            picture_categories.get(category, []))

    output['collections'] = render_to_string(
        'catalogue/collection_list.html', collection_list(collections))
    if as_json:
        return JsonResponse(output)
    else:
        return render_to_response('catalogue/catalogue.html', locals(),
            context_instance=RequestContext(request))
コード例 #2
0
def literature(request):
    books = Book.objects.filter(parent=None)

    # last_published = Book.objects.exclude(cover_thumb='').filter(parent=None).order_by('-created_at')[:20]
    # most_popular = Book.objects.exclude(cover_thumb='')\
    #                    .order_by('-popularity__count', 'sort_key_author', 'sort_key')[:20]
    return object_list(request, books, related_tags=get_top_level_related_tags([]))
コード例 #3
0
ファイル: views.py プロジェクト: learner9753/wolnelektury
def literature(request):
    books = Book.objects.filter(parent=None)

    # last_published = Book.objects.exclude(cover_thumb='').filter(parent=None).order_by('-created_at')[:20]
    # most_popular = Book.objects.exclude(cover_thumb='')\
    #                    .order_by('-popularity__count', 'sort_key_author', 'sort_key')[:20]
    return object_list(request,
                       books,
                       related_tags=get_top_level_related_tags([]))
コード例 #4
0
ファイル: views.py プロジェクト: learner9753/wolnelektury
def tagged_object_list(request, tags, list_type):
    try:
        tags = analyse_tags(request, tags)
    except ResponseInstead as e:
        return e.response

    if list_type == 'gallery' and any(tag.category == 'set' for tag in tags):
        raise Http404

    if any(tag.category in ('theme', 'thing') for tag in tags):
        return theme_list(request, tags, list_type=list_type)

    if list_type == 'books':
        books = Book.tagged.with_all(tags)

        if any(tag.category == 'set' for tag in tags):
            params = {'objects': books}
        else:
            params = {
                'objects': Book.tagged_top_level(tags),
                'fragments': Fragment.objects.filter(book__in=books),
                'related_tags': get_top_level_related_tags(tags),
            }
    elif list_type == 'gallery':
        params = {'objects': Picture.tagged.with_all(tags)}
    elif list_type == 'audiobooks':
        audiobooks = Book.objects.filter(media__type__in=('mp3',
                                                          'ogg')).distinct()
        params = {
            'objects': Book.tagged.with_all(tags, audiobooks),
            'extra': {
                'daisy':
                Book.tagged.with_all(
                    tags,
                    audiobooks.filter(media__type='daisy').distinct()),
            }
        }
    else:
        raise Http404

    return object_list(request, tags=tags, list_type=list_type, **params)
コード例 #5
0
ファイル: views.py プロジェクト: fnp/wolnelektury
def tag_catalogue(request, category):
    if category == 'theme':
        tags = Tag.objects.usage_for_model(
            Fragment, counts=True).filter(category='theme')
    else:
        tags = list(get_top_level_related_tags((), categories=(category,)))

    described_tags = [tag for tag in tags if tag.description]

    if len(described_tags) > 4:
        best = random.sample(described_tags, 4)
    else:
        best = described_tags

    return render(request, 'catalogue/tag_catalogue.html', {
        'tags': tags,
        'best': best,
        'title': constants.CATEGORIES_NAME_PLURAL[category],
        'whole_category': constants.WHOLE_CATEGORY[category],
        'active_menu_item': 'theme' if category == 'theme' else None,
    })
コード例 #6
0
ファイル: views.py プロジェクト: fnp/wolnelektury
def tagged_object_list(request, tags, list_type):
    try:
        tags = analyse_tags(request, tags)
    except ResponseInstead as e:
        return e.response

    if is_crawler(request) and len(tags) > 1:
        return HttpResponseForbidden('address removed from crawling. check robots.txt')

    if list_type == 'gallery' and any(tag.category == 'set' for tag in tags):
        raise Http404

    if any(tag.category in ('theme', 'thing') for tag in tags):
        return theme_list(request, tags, list_type=list_type)

    if list_type == 'books':
        books = Book.tagged.with_all(tags)

        if any(tag.category == 'set' for tag in tags):
            params = {'objects': books}
        else:
            params = {
                'objects': Book.tagged_top_level(tags),
                'fragments': Fragment.objects.filter(book__in=books),
                'related_tags': get_top_level_related_tags(tags),
            }
    elif list_type == 'gallery':
        params = {'objects': Picture.tagged.with_all(tags)}
    elif list_type == 'audiobooks':
        audiobooks = Book.objects.filter(media__type__in=('mp3', 'ogg')).distinct()
        params = {
            'objects': Book.tagged.with_all(tags, audiobooks),
            'extra': {
                'daisy': Book.tagged.with_all(tags, audiobooks.filter(media__type='daisy').distinct()),
            }
        }
    else:
        raise Http404

    return object_list(request, tags=tags, list_type=list_type, **params)
コード例 #7
0
ファイル: views.py プロジェクト: learner9753/wolnelektury
def tag_catalogue(request, category):
    if category == 'theme':
        tags = Tag.objects.usage_for_model(
            Fragment, counts=True).filter(category='theme')
    else:
        tags = list(get_top_level_related_tags((), categories=(category, )))

    described_tags = [tag for tag in tags if tag.description]

    if len(described_tags) > 4:
        best = random.sample(described_tags, 4)
    else:
        best = described_tags

    return render(
        request, 'catalogue/tag_catalogue.html', {
            'tags': tags,
            'best': best,
            'title': constants.CATEGORIES_NAME_PLURAL[category],
            'whole_category': constants.WHOLE_CATEGORY[category],
            'active_menu_item': 'theme' if category == 'theme' else None,
        })
コード例 #8
0
ファイル: views.py プロジェクト: fnp/wolnelektury
def literature(request):
    books = Book.objects.filter(parent=None)
    return object_list(request, books, related_tags=get_top_level_related_tags([]))
コード例 #9
0
ファイル: views.py プロジェクト: jumasheff/wolnelektury
        # we want the Pictures to go first
        objects = MultiQuerySet(areas, fragments)
    else:
        all_books = models.Book.tagged.with_all(tags)
        if shelf_is_set:
            books = all_books.order_by('sort_key_author', 'title')
            pictures = Picture.objects.none()
            related_book_tags = models.Tag.objects.usage_for_queryset(
                books, counts=True).exclude(
                category='set').exclude(pk__in=tags_pks)
        else:
            books = models.Book.tagged_top_level(tags).order_by(
                'sort_key_author', 'title')
            pictures = Picture.tagged.with_all(tags).order_by(
                'sort_key_author', 'title')
            related_book_tags = get_top_level_related_tags(tags)

        fragments = models.Fragment.objects.filter(book__in=all_books)
        areas = PictureArea.objects.filter(picture__in=pictures)

        categories = split_tags(
            related_book_tags,
            models.Tag.objects.usage_for_queryset(
                pictures, counts=True).exclude(pk__in=tags_pks),
            models.Tag.objects.usage_for_queryset(
                fragments, counts=True).filter(
                category='theme').exclude(pk__in=tags_pks),
            models.Tag.objects.usage_for_queryset(
                areas, counts=True).filter(
                category__in=('theme', 'thing')).exclude(
                pk__in=tags_pks),