This commit is contained in:
Vinejar
2025-03-30 02:59:20 +03:00
commit 2184ad7171
6 changed files with 231 additions and 0 deletions

View File

@@ -0,0 +1,13 @@
from pymongo import MongoClient
client = MongoClient('mongodb://localhost:27017/')
db = client['Manga'] # Название базы данных
manga_collection = db['Hentai_Manga'] # Название коллекции

View File

@@ -0,0 +1,7 @@
from django.urls import path
from .views import show_manga, show_manga_page
urlpatterns = [
path('manga/<int:manga_id>/', show_manga, name='show_manga'),
path('manga/<int:manga_id>/page/<int:page_number>/', show_manga_page, name='show_manga_page'), # новый маршрут
]

View File

@@ -0,0 +1,19 @@
from django.shortcuts import render
from .models import manga_collection
def show_manga(request, manga_id):
manga = manga_collection.find_one({"id": int(manga_id)}) # Ищем мангу по 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] # Индекс страницы манги (начинаем с 0)
return render(request, "manga_page.html", {"manga": manga, "img_url": img_url, "page_number": page_number})

64
templates/manga_view.html Normal file
View File

@@ -0,0 +1,64 @@
<!DOCTYPE html>
<html lang="ru">
<head>
{% load static %}
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ manga.original_title }}</title>
<link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">
<script src="{% static 'js/script.js' %}" defer></script>
</head>
<body>
<div class="container">
<!-- Основной контейнер для контента -->
<div class="content-wrapper">
<div class="manga-grid-container" id="previewContainer" >
<div class="chapter">
<ul style="display: block">
<li class="breadcrumb-item">
<a href="/manga/111">Каталог</a>
<span class="separator">-</span>
<a href="/manga/111">{{ manga.original_title }}</a>
</li>
</ul>
</div>
<!-- Бокс с изображением -->
<div class="image-box" id="imageBox">
<img id="mangaImage" src="" alt="Страница">
</div>
<!-- Сетка-превью -->
<div id="previewGrid" class="manga-grid">
{% for img in manga.imgs_manga %}
<div class="manga-preview">
<img src="{{ img }}"
onclick="showImage('{{ img }}')"
alt="Стр {{ forloop.counter }}">
</div>
{% endfor %}
</div>
</div>
</div>
<!-- Выпадающий список страниц -->
<div class="page postload">
<select id="drop" onchange="changePage(this)">
<option value="preview">🔍 Превью</option>
{% for img in manga.imgs_manga %}
<option value="{{ img }}">Стр {{ forloop.counter }}</option>
{% endfor %}
</select>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,94 @@
.content-wrapper {
position: relative;
min-height: 500px;
}
.image-box {
display: none;
width: 100%;
text-align: center;
margin-bottom: 20px;
}
#mangaImage {
max-width: 100%;
max-height: 90vh;
object-fit: contain;
}
.manga-grid-container {
width: 90%;
margin: 0 auto;
}
.manga-grid {
display: grid;
grid-template-columns: repeat(9, 102px);
gap: 10px;
justify-content: center;
margin: 0 auto;
max-width: calc(6 * 102px + 5 * 10px);
}
.manga-preview {
width: 102px;
height: 142px;
overflow: hidden;
border-radius: 3px;
box-shadow: 0 1px 3px rgba(0,0,0,0.2);
background: #eee;
}
.manga-preview img {
width: 100%;
height: 100%;
object-fit: cover;
object-position: center top;
cursor: pointer;
transition: transform 0.2s;
}
.manga-preview img:hover {
transform: scale(1.05);
}
.breadcrumb-item {
list-style: none;
display: flex;
align-items: center;
}
.breadcrumb-item a {
text-decoration: none;
color: green; /* Сохраняет цвет текста как у родителя */
font-weight: bold;
}
.breadcrumb-item .separator {
margin: 0 5px;
}
/* Адаптивность */
@media (max-width: 768px) {
.manga-grid {
grid-template-columns: repeat(4, 102px);
}
}
@media (max-width: 480px) {
.manga-grid {
grid-template-columns: repeat(3, 102px);
}
}
@media (max-width: 360px) {
.manga-grid {
grid-template-columns: repeat(2, 102px);
}
}

View File

@@ -0,0 +1,34 @@
function changePage(select) {
const selectedImg = select.value;
const previewContainer = document.getElementById("previewContainer");
const imageBox = document.getElementById("imageBox");
const mangaImage = document.getElementById("mangaImage");
if (selectedImg === "preview") {
previewContainer.style.display = "block";
imageBox.style.display = "none";
} else {
previewContainer.style.display = "none";
mangaImage.src = selectedImg;
imageBox.style.display = "block";
}
}
function showImage(imgSrc) {
const drop = document.getElementById("drop");
drop.value = imgSrc;
changePage(drop);
// Прокрутка к изображению
document.getElementById("imageBox").scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
// Инициализация при загрузке
document.addEventListener('DOMContentLoaded', function() {
// Убедимся, что превью отображается по умолчанию
document.getElementById("previewContainer").style.display = "block";
document.getElementById("imageBox").style.display = "none";
});