Добавлен каталог, с рабочим стилем
This commit is contained in:
@@ -1,7 +1,9 @@
|
|||||||
from django.urls import path
|
from django.urls import path
|
||||||
from .views import show_manga, show_manga_page
|
from .views import show_manga, show_manga_page, manga_catalog
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
path('catalog/', manga_catalog, name='manga_catalog'),
|
||||||
path('manga/<int:manga_id>/', show_manga, name='show_manga'),
|
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'),
|
path('manga/<int:manga_id>/page/<int:page_number>/', show_manga_page, name='show_manga_page'),
|
||||||
]
|
]
|
||||||
@@ -1,5 +1,17 @@
|
|||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
from .models import manga_collection
|
from .models import manga_collection
|
||||||
|
from django.core.paginator import Paginator
|
||||||
|
|
||||||
|
|
||||||
|
def manga_catalog(request):
|
||||||
|
all_manga = list(manga_collection.find({}))
|
||||||
|
paginator = Paginator(all_manga, 20)
|
||||||
|
page_number = request.GET.get('page')
|
||||||
|
page_obj = paginator.get_page(page_number)
|
||||||
|
return render(request, 'manga_catalog.html', {
|
||||||
|
'page_obj': page_obj,
|
||||||
|
'manga_list': page_obj.object_list
|
||||||
|
})
|
||||||
|
|
||||||
def show_manga(request, manga_id):
|
def show_manga(request, manga_id):
|
||||||
manga = manga_collection.find_one({"id": int(manga_id)})
|
manga = manga_collection.find_one({"id": int(manga_id)})
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="en">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<title>Title</title>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -5,6 +5,8 @@
|
|||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title>{% block title %}{{ manga.original_title }}{% endblock %}</title>
|
<title>{% block title %}{{ manga.original_title }}{% endblock %}</title>
|
||||||
|
<link rel="stylesheet" href="{% static 'css/manga_catalog.css' %}">
|
||||||
|
|
||||||
<link rel="stylesheet" href="{% static 'css/manga_view.css' %}">
|
<link rel="stylesheet" href="{% static 'css/manga_view.css' %}">
|
||||||
<!-- Меняем размер пикч -->
|
<!-- Меняем размер пикч -->
|
||||||
<style>
|
<style>
|
||||||
|
|||||||
60
templates/manga_catalog.html
Normal file
60
templates/manga_catalog.html
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
{% extends 'base_manga.html' %}
|
||||||
|
{% load static %}
|
||||||
|
|
||||||
|
{% block title %}Каталог манги{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="catalog-container">
|
||||||
|
<h1>Каталог манги</h1>
|
||||||
|
|
||||||
|
<div class="manga-list">
|
||||||
|
{% for manga in manga_list %}
|
||||||
|
<div class="manga-item">
|
||||||
|
<!-- Изображение слева -->
|
||||||
|
<div class="manga-cover">
|
||||||
|
<img src="{{ manga.img }}"
|
||||||
|
alt="{{ manga.original_title }}"
|
||||||
|
onerror="this.onerror=null; this.src='{% static 'images/default_cover.jpg' %}'">
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Информация справа -->
|
||||||
|
<div class="manga-info">
|
||||||
|
<h2>{{ manga.original_title }}</h2>
|
||||||
|
{% if manga.russian_title %}
|
||||||
|
<p class="alt-title">{{ manga.russian_title }}</p>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<div class="meta-data">
|
||||||
|
<span class="pages">{{ manga.len_manga }} страниц</span>
|
||||||
|
{% if manga.tags %}
|
||||||
|
<div class="tags">
|
||||||
|
{% for tag in manga.tags %}
|
||||||
|
<span class="tag">{{ tag }}</span>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<a href="{% url 'show_manga' manga.id %}" class="read-button">Читать</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="pagination">
|
||||||
|
{% if page_obj.has_previous %}
|
||||||
|
<a href="?page=1">« первая</a>
|
||||||
|
<a href="?page={{ page_obj.previous_page_number }}">предыдущая</a>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<span class="current">
|
||||||
|
Страница {{ page_obj.number }} из {{ page_obj.paginator.num_pages }}
|
||||||
|
</span>
|
||||||
|
|
||||||
|
{% if page_obj.has_next %}
|
||||||
|
<a href="?page={{ page_obj.next_page_number }}">следующая</a>
|
||||||
|
<a href="?page={{ page_obj.paginator.num_pages }}">последняя »</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
107
templates/static/css/manga_catalog.css
Normal file
107
templates/static/css/manga_catalog.css
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
/* Базовые стили */
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
background: #f8f9fa;
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.catalog-container {
|
||||||
|
max-width: 1200px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Карточка манги */
|
||||||
|
.manga-item {
|
||||||
|
display: flex;
|
||||||
|
gap: 20px;
|
||||||
|
background: white;
|
||||||
|
border-radius: 8px;
|
||||||
|
overflow: hidden;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Изображение слева (фиксированная ширина) */
|
||||||
|
.manga-cover {
|
||||||
|
width: 200px;
|
||||||
|
height: 280px;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.manga-cover img {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Информация справа */
|
||||||
|
.manga-info {
|
||||||
|
padding: 25px;
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.manga-info h2 {
|
||||||
|
margin: 0 0 8px 0;
|
||||||
|
color: #333;
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.alt-title {
|
||||||
|
color: #666;
|
||||||
|
margin: 0 0 15px 0;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.meta-data {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.pages {
|
||||||
|
display: block;
|
||||||
|
color: #888;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tags {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.tag {
|
||||||
|
background: #f0f0f0;
|
||||||
|
padding: 4px 10px;
|
||||||
|
border-radius: 4px;
|
||||||
|
font-size: 14px;
|
||||||
|
color: #555;
|
||||||
|
}
|
||||||
|
|
||||||
|
.read-button {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 10px 25px;
|
||||||
|
background: #4a89dc;
|
||||||
|
color: white;
|
||||||
|
text-decoration: none;
|
||||||
|
border-radius: 5px;
|
||||||
|
margin-top: 15px;
|
||||||
|
transition: background 0.3s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.read-button:hover {
|
||||||
|
background: #3b7dd8;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Адаптивность */
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.manga-item {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.manga-cover {
|
||||||
|
width: 100%;
|
||||||
|
height: 300px;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user