feat: добавить миграцию для моделей Category и Item, шаблон 404 страницы
All checks were successful
Build and Push Docker Image / build (push) Successful in 27s
All checks were successful
Build and Push Docker Image / build (push) Successful in 27s
- Создана миграция `0001_initial.py` для моделей `Category` и `Item` - Добавлен шаблон `404.html` с пользовательским стилем и макетом ошибки
This commit is contained in:
45
items/migrations/0001_initial.py
Normal file
45
items/migrations/0001_initial.py
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
# Generated by Django 6.0.3 on 2026-04-07 18:31
|
||||||
|
|
||||||
|
import django.db.models.deletion
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Category',
|
||||||
|
fields=[
|
||||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('name', models.CharField(max_length=255, verbose_name='Название')),
|
||||||
|
('slug', models.SlugField(unique=True, verbose_name='URL')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Категория',
|
||||||
|
'verbose_name_plural': 'Категории',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='Item',
|
||||||
|
fields=[
|
||||||
|
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('name', models.CharField(max_length=255, verbose_name='Название')),
|
||||||
|
('slug', models.SlugField(unique=True, verbose_name='URL')),
|
||||||
|
('description', models.TextField(blank=True, verbose_name='Описание')),
|
||||||
|
('price', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='Цена')),
|
||||||
|
('is_available', models.BooleanField(default=True, verbose_name='В наличии')),
|
||||||
|
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')),
|
||||||
|
('updated_at', models.DateTimeField(auto_now=True, verbose_name='Дата обновления')),
|
||||||
|
('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='items', to='items.category', verbose_name='Категория')),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'verbose_name': 'Товар',
|
||||||
|
'verbose_name_plural': 'Товары',
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
||||||
30
templates/404.html
Normal file
30
templates/404.html
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{% extends "_layouts/base.html" %}
|
||||||
|
{% load static %}
|
||||||
|
|
||||||
|
{% block title %}404{% endblock %}
|
||||||
|
|
||||||
|
{% block add_css %}
|
||||||
|
<link rel="stylesheet" href="{% static "css/index.css" %}">
|
||||||
|
<link rel="stylesheet" href="{% static 'css/error.css' %}">
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div class="full-page">
|
||||||
|
{% include "_fragments/header.html" %}
|
||||||
|
|
||||||
|
<main class="container error-page">
|
||||||
|
<h1 class="error-code">4 0 4</h1>
|
||||||
|
<h2 class="error-subtitle">ОЙ, КАЖЕТСЯ ЗДЕСЬ НИЧЕГО НЕТ...</h2>
|
||||||
|
<p class="error-description">
|
||||||
|
Приносим свои извинения! Скорее всего вы попали <br>
|
||||||
|
на несуществующую страницу, предлагаем вам вернутся в каталог.
|
||||||
|
</p>
|
||||||
|
<div class="error-actions">
|
||||||
|
<a href="/catalog/" class="error-btn-1">ПЕРЕЙТИ В КАТАЛОГ</a>
|
||||||
|
<a href="/" class="error-btn-2">НА ГЛАВНУЮ</a>
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
|
||||||
|
{% include "_fragments/footer.html" %}
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
||||||
Reference in New Issue
Block a user