53 lines
1.8 KiB
Python
53 lines
1.8 KiB
Python
from django.shortcuts import render
|
|
from django.core.paginator import Paginator
|
|
from .models import manga_collection
|
|
|
|
|
|
def manga_catalog(request):
|
|
# Получаем список всех уникальных тегов
|
|
all_tags = manga_collection.distinct("tags")
|
|
|
|
# Получаем выбранные теги из GET-параметров
|
|
selected_tags = request.GET.getlist('tags')
|
|
|
|
# Формируем запрос для фильтрации
|
|
query = {}
|
|
if selected_tags:
|
|
query['tags'] = {'$all': selected_tags}
|
|
|
|
# Получаем отфильтрованные записи
|
|
filtered_manga = list(manga_collection.find(query))
|
|
|
|
# Пагинация
|
|
paginator = Paginator(filtered_manga, 20)
|
|
page_number = request.GET.get('page')
|
|
page_obj = paginator.get_page(page_number)
|
|
|
|
total_manga_count = manga_collection.count_documents({})
|
|
|
|
return render(request, 'manga_catalog.html', {
|
|
'page_obj': page_obj,
|
|
'manga_list': page_obj.object_list,
|
|
'total_manga_count': total_manga_count,
|
|
'all_tags': sorted(all_tags),
|
|
'selected_tags': selected_tags
|
|
})
|
|
|
|
def show_manga(request, manga_id):
|
|
manga = manga_collection.find_one({"id": int(manga_id)})
|
|
if not manga:
|
|
return render(request, "not_found.html")
|
|
return render(request, "manga_view.html", {"manga": manga})
|
|
|
|
def show_manga_page(request, manga_id, page_number):
|
|
manga = manga_collection.find_one({"id": int(manga_id)})
|
|
if not manga or page_number < 1 or page_number > manga['len_manga']:
|
|
return render(request, "not_found.html")
|
|
|
|
img_url = manga['imgs_manga'][page_number - 1]
|
|
return render(request, "manga_page.html", {
|
|
"manga": manga,
|
|
"img_url": img_url,
|
|
"page_number": page_number
|
|
})
|