diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6430375 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,14 @@ +# Используем базовый образ с MySQL +FROM mysql:latest + +# Определение переменных окружения для MySQL +ENV MYSQL_ROOT_PASSWORD=Ax123456 +ENV MYSQL_DATABASE=django_db +ENV MYSQL_USER=django_user +ENV MYSQL_PASSWORD=Ax123456 + +# Копирование sql-скрипта и настройка инициализации БД +COPY init.sql /docker-entrypoint-initdb.d/ + +# Определяем порт для доступа к MySQL +EXPOSE 3306 diff --git a/README.md b/README.md index b7455ba..1c3cf78 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,8 @@ # Nasa-TEST +Для запуска docker mysql server + +``` +docker-compose build +docker-compose up +``` \ No newline at end of file diff --git a/config/__init__.py b/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/config/asgi.py b/config/asgi.py new file mode 100644 index 0000000..4f703b7 --- /dev/null +++ b/config/asgi.py @@ -0,0 +1,4 @@ +import os +from django.core.asgi import get_asgi_application +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') +application = get_asgi_application() \ No newline at end of file diff --git a/config/settings.py b/config/settings.py new file mode 100644 index 0000000..8050876 --- /dev/null +++ b/config/settings.py @@ -0,0 +1,77 @@ +import os +from pathlib import Path +BASE_DIR = Path(__file__).resolve().parent.parent +SECRET_KEY = 'django-insecure-a9-$s7^q=2lxwoo=$ejvz104=d^$un(9tof%d$^&e01)=-mqpz' +DEBUG = True +ALLOWED_HOSTS = [] +INSTALLED_APPS = [ + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.sessions', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'filer', + 'easy_thumbnails', + 'adminsortable2', + 'main.apps.MainConfig', +] +MIDDLEWARE = [ + 'django.middleware.security.SecurityMiddleware', + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +] +ROOT_URLCONF = 'config.urls' +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [os.getenv('TEMPLATES_DIR', os.path.join(BASE_DIR, "templates"))], + 'APP_DIRS': True, + 'OPTIONS': { + 'context_processors': [ + 'django.template.context_processors.debug', + 'django.template.context_processors.request', + 'django.contrib.auth.context_processors.auth', + 'django.contrib.messages.context_processors.messages', + ], + }, + }, +] +WSGI_APPLICATION = 'config.wsgi.application' +# Database +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.mysql', + 'NAME': 'django_db', + 'USER': 'django_user', + 'PASSWORD': 'Ax123456', + 'HOST': '127.0.0.1', + 'PORT': '32769', + } +} +AUTH_PASSWORD_VALIDATORS = [ + {'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', }, + {'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, + {'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, + {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, +] +LANGUAGE_CODE = 'ru-ru' +TIME_ZONE = 'Europe/Moscow' +USE_I18N = True +USE_TZ = True +# Static files (CSS, JavaScript, Images) +# Указываем URL для доступа к статическим файлам +STATIC_URL = '/static/' +STATIC_ROOT = os.path.join(BASE_DIR, "static") +STATICFILES_DIRS = [ + os.path.join(BASE_DIR, "staticfiles"), +] +MEDIA_URL = '/media/' +MEDIA_ROOT = os.path.join(BASE_DIR, "mediafiles") +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' +LOGOUT_REDIRECT_URL = "main" +FILE_UPLOAD_PERMISSIONS = 0o644 \ No newline at end of file diff --git a/config/urls.py b/config/urls.py new file mode 100644 index 0000000..065c689 --- /dev/null +++ b/config/urls.py @@ -0,0 +1,12 @@ +from django.contrib import admin +from django.urls import path, include +from django.conf import settings +from django.conf.urls.static import static + +urlpatterns = [ + path('admin/', admin.site.urls), + path('', include('main.urls')), +] +if settings.DEBUG: + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) \ No newline at end of file diff --git a/config/wsgi.py b/config/wsgi.py new file mode 100644 index 0000000..feac0f5 --- /dev/null +++ b/config/wsgi.py @@ -0,0 +1,4 @@ +import os +from django.core.wsgi import get_wsgi_application +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') +application = get_wsgi_application() \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c9a59bd --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,29 @@ +version: '3' + +services: + db: + build: . + container_name: mysql_django_db + ports: + - "3306:3306" + volumes: + - mysql_data:/var/lib/mysql + environment: + MYSQL_ROOT_PASSWORD: Ax123456 + MYSQL_DATABASE: django_db + MYSQL_USER: django_user + MYSQL_PASSWORD: Ax123456 + + web: + build: . + container_name: django_app + command: python manage.py runserver 0.0.0.0:8000 + volumes: + - .:/app + ports: + - "8000:8000" + depends_on: + - db + +volumes: + mysql_data: diff --git a/init.sql b/init.sql new file mode 100644 index 0000000..e69de29 diff --git a/main/__init__.py b/main/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/main/admin.py b/main/admin.py new file mode 100644 index 0000000..e11d7d8 --- /dev/null +++ b/main/admin.py @@ -0,0 +1,19 @@ +from django.contrib import admin +from adminsortable2.admin import SortableAdminMixin + +from .models import SliderItem + +#@admin.register(SliderItem) +class SliderItemAdmin(SortableAdminMixin, admin.ModelAdmin): + list_display = ['title', 'image_thumbnail'] + search_fields = ['title'] + list_filter = ['title'] + + def image_thumbnail(self, obj): + if obj.image: + return '' % obj.image.url + return 'No Image' + image_thumbnail.allow_tags = True + image_thumbnail.short_description = 'Thumbnail' + +admin.site.register(SliderItem, SliderItemAdmin) diff --git a/main/apps.py b/main/apps.py new file mode 100644 index 0000000..167f044 --- /dev/null +++ b/main/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class MainConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'main' diff --git a/main/migrations/0001_initial.py b/main/migrations/0001_initial.py new file mode 100644 index 0000000..10df464 --- /dev/null +++ b/main/migrations/0001_initial.py @@ -0,0 +1,26 @@ +# Generated by Django 4.1 on 2024-05-08 14:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='SliderItem', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=255)), + ('image', models.ImageField(blank=True, null=True, upload_to='')), + ], + options={ + 'verbose_name': 'Изображение для сладера', + 'verbose_name_plural': 'Изображения для слайдера', + }, + ), + ] diff --git a/main/migrations/0002_slideritem_my_order_alter_slideritem_image.py b/main/migrations/0002_slideritem_my_order_alter_slideritem_image.py new file mode 100644 index 0000000..203d03b --- /dev/null +++ b/main/migrations/0002_slideritem_my_order_alter_slideritem_image.py @@ -0,0 +1,27 @@ +# Generated by Django 4.1 on 2024-05-08 14:34 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import filer.fields.image + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.FILER_IMAGE_MODEL), + ('main', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='slideritem', + name='my_order', + field=models.PositiveIntegerField(default=0), + ), + migrations.AlterField( + model_name='slideritem', + name='image', + field=filer.fields.image.FilerImageField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.FILER_IMAGE_MODEL), + ), + ] diff --git a/main/migrations/__init__.py b/main/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/main/models.py b/main/models.py new file mode 100644 index 0000000..de54b35 --- /dev/null +++ b/main/models.py @@ -0,0 +1,21 @@ +from django.db import models +from filer.fields.image import FilerImageField + + +class SliderItem(models.Model): + title = models.CharField(max_length=255) + image = FilerImageField(null=True, blank=True, on_delete=models.SET_NULL) + + my_order = models.PositiveIntegerField( + default=0, + blank=False, + null=False, + ) + + class Meta: + verbose_name = 'Изображение для сладера' + verbose_name_plural = 'Изображения для слайдера' + ordering = ['my_order'] + + def __str__(self): + return self.title \ No newline at end of file diff --git a/main/tests.py b/main/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/main/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/main/urls.py b/main/urls.py new file mode 100644 index 0000000..7baf226 --- /dev/null +++ b/main/urls.py @@ -0,0 +1,6 @@ +from django.urls import path, include +from .views import MainView +# +urlpatterns = [ + path('', MainView.as_view(), name='main'), +] \ No newline at end of file diff --git a/main/views.py b/main/views.py new file mode 100644 index 0000000..49af8bf --- /dev/null +++ b/main/views.py @@ -0,0 +1,16 @@ +from django.shortcuts import render +from django.views.generic import TemplateView +from .models import SliderItem + +class MainView(TemplateView): + template_name = 'index.html' + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['title'] = 'Главная страница' + context['slider_items'] = SliderItem.objects.all() + return context + + def get(self, request, *args, **kwargs): + context = self.get_context_data() + return self.render_to_response(context) \ No newline at end of file diff --git a/manage.py b/manage.py new file mode 100644 index 0000000..8e7ac79 --- /dev/null +++ b/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == '__main__': + main() diff --git a/mediafiles/filer_public/1a/6b/1a6b5a36-70e2-4069-a287-a7de7e51c5c9/car01.png b/mediafiles/filer_public/1a/6b/1a6b5a36-70e2-4069-a287-a7de7e51c5c9/car01.png new file mode 100644 index 0000000..a2de001 Binary files /dev/null and b/mediafiles/filer_public/1a/6b/1a6b5a36-70e2-4069-a287-a7de7e51c5c9/car01.png differ diff --git a/mediafiles/filer_public/41/a8/41a8f0e6-b56b-4e65-ae9d-4c961bc71d8d/car05.jpg b/mediafiles/filer_public/41/a8/41a8f0e6-b56b-4e65-ae9d-4c961bc71d8d/car05.jpg new file mode 100644 index 0000000..dc1a93c Binary files /dev/null and b/mediafiles/filer_public/41/a8/41a8f0e6-b56b-4e65-ae9d-4c961bc71d8d/car05.jpg differ diff --git a/mediafiles/filer_public/56/ff/56ffac0e-ccc4-4514-a20c-40ee602e0ce9/car03.jpg b/mediafiles/filer_public/56/ff/56ffac0e-ccc4-4514-a20c-40ee602e0ce9/car03.jpg new file mode 100644 index 0000000..8badda1 Binary files /dev/null and b/mediafiles/filer_public/56/ff/56ffac0e-ccc4-4514-a20c-40ee602e0ce9/car03.jpg differ diff --git a/mediafiles/filer_public/65/c1/65c1f63c-fc25-40e8-b1ae-78bca754c8c5/car04.jpg b/mediafiles/filer_public/65/c1/65c1f63c-fc25-40e8-b1ae-78bca754c8c5/car04.jpg new file mode 100644 index 0000000..62b9eef Binary files /dev/null and b/mediafiles/filer_public/65/c1/65c1f63c-fc25-40e8-b1ae-78bca754c8c5/car04.jpg differ diff --git a/mediafiles/filer_public/ec/20/ec208b63-303e-4900-8cf3-95c504000afb/car02.jpg b/mediafiles/filer_public/ec/20/ec208b63-303e-4900-8cf3-95c504000afb/car02.jpg new file mode 100644 index 0000000..696ed26 Binary files /dev/null and b/mediafiles/filer_public/ec/20/ec208b63-303e-4900-8cf3-95c504000afb/car02.jpg differ diff --git a/mediafiles/filer_public_thumbnails/filer_public/1a/6b/1a6b5a36-70e2-4069-a287-a7de7e51c5c9/car01.png__180x180_q85_crop_subsampling-2_upscale.jpg b/mediafiles/filer_public_thumbnails/filer_public/1a/6b/1a6b5a36-70e2-4069-a287-a7de7e51c5c9/car01.png__180x180_q85_crop_subsampling-2_upscale.jpg new file mode 100644 index 0000000..0a89f69 Binary files /dev/null and b/mediafiles/filer_public_thumbnails/filer_public/1a/6b/1a6b5a36-70e2-4069-a287-a7de7e51c5c9/car01.png__180x180_q85_crop_subsampling-2_upscale.jpg differ diff --git a/mediafiles/filer_public_thumbnails/filer_public/41/a8/41a8f0e6-b56b-4e65-ae9d-4c961bc71d8d/car05.jpg__180x180_q85_crop_subsampling-2_upscale.jpg b/mediafiles/filer_public_thumbnails/filer_public/41/a8/41a8f0e6-b56b-4e65-ae9d-4c961bc71d8d/car05.jpg__180x180_q85_crop_subsampling-2_upscale.jpg new file mode 100644 index 0000000..6953b35 Binary files /dev/null and b/mediafiles/filer_public_thumbnails/filer_public/41/a8/41a8f0e6-b56b-4e65-ae9d-4c961bc71d8d/car05.jpg__180x180_q85_crop_subsampling-2_upscale.jpg differ diff --git a/mediafiles/filer_public_thumbnails/filer_public/56/ff/56ffac0e-ccc4-4514-a20c-40ee602e0ce9/car03.jpg__180x180_q85_crop_subsampling-2_upscale.jpg b/mediafiles/filer_public_thumbnails/filer_public/56/ff/56ffac0e-ccc4-4514-a20c-40ee602e0ce9/car03.jpg__180x180_q85_crop_subsampling-2_upscale.jpg new file mode 100644 index 0000000..545dc64 Binary files /dev/null and b/mediafiles/filer_public_thumbnails/filer_public/56/ff/56ffac0e-ccc4-4514-a20c-40ee602e0ce9/car03.jpg__180x180_q85_crop_subsampling-2_upscale.jpg differ diff --git a/mediafiles/filer_public_thumbnails/filer_public/65/c1/65c1f63c-fc25-40e8-b1ae-78bca754c8c5/car04.jpg__180x180_q85_crop_subsampling-2_upscale.jpg b/mediafiles/filer_public_thumbnails/filer_public/65/c1/65c1f63c-fc25-40e8-b1ae-78bca754c8c5/car04.jpg__180x180_q85_crop_subsampling-2_upscale.jpg new file mode 100644 index 0000000..8b2ac78 Binary files /dev/null and b/mediafiles/filer_public_thumbnails/filer_public/65/c1/65c1f63c-fc25-40e8-b1ae-78bca754c8c5/car04.jpg__180x180_q85_crop_subsampling-2_upscale.jpg differ diff --git a/mediafiles/filer_public_thumbnails/filer_public/ec/20/ec208b63-303e-4900-8cf3-95c504000afb/car02.jpg__180x180_q85_crop_subsampling-2_upscale.jpg b/mediafiles/filer_public_thumbnails/filer_public/ec/20/ec208b63-303e-4900-8cf3-95c504000afb/car02.jpg__180x180_q85_crop_subsampling-2_upscale.jpg new file mode 100644 index 0000000..dbba263 Binary files /dev/null and b/mediafiles/filer_public_thumbnails/filer_public/ec/20/ec208b63-303e-4900-8cf3-95c504000afb/car02.jpg__180x180_q85_crop_subsampling-2_upscale.jpg differ diff --git a/req.pip b/req.pip new file mode 100644 index 0000000..67aea89 Binary files /dev/null and b/req.pip differ diff --git a/staticfiles/assets/bootstrap-logo.svg b/staticfiles/assets/bootstrap-logo.svg new file mode 100644 index 0000000..f018965 --- /dev/null +++ b/staticfiles/assets/bootstrap-logo.svg @@ -0,0 +1 @@ + diff --git a/staticfiles/css/ajax-loader.gif b/staticfiles/css/ajax-loader.gif new file mode 100644 index 0000000..e0e6e97 Binary files /dev/null and b/staticfiles/css/ajax-loader.gif differ diff --git a/staticfiles/css/custom.css b/staticfiles/css/custom.css new file mode 100644 index 0000000..a815099 --- /dev/null +++ b/staticfiles/css/custom.css @@ -0,0 +1,50 @@ +.image-container { + position: relative; + display: flex; + justify-content: center; + align-items: center; + height: 480px; +} + +.image-nav-container { + position: relative; + display: flex; + justify-content: center; + align-items: center; + height: 120px; +} + +.rounded-image { + border-radius: 30px; + max-width: 100%; + max-height: 100%; + object-fit: cover; + object-position: center; +} + +.thumbnail { + width: 100px; + height: 100px; + margin: 10px; +} + +@media (min-width: 767px) { + .section-img-col { + width: 100%; + height: auto; + } + +} +@media (max-width: 767px) { + .section-img-col { + width: 100%; + height: auto; + } + .rounded-image { + height: 380px; + border-radius: 20px; + } + .image-nav-container { + height: 48px; + } +} diff --git a/staticfiles/css/fonts/slick.eot b/staticfiles/css/fonts/slick.eot new file mode 100644 index 0000000..2cbab9c Binary files /dev/null and b/staticfiles/css/fonts/slick.eot differ diff --git a/staticfiles/css/fonts/slick.svg b/staticfiles/css/fonts/slick.svg new file mode 100644 index 0000000..b36a66a --- /dev/null +++ b/staticfiles/css/fonts/slick.svg @@ -0,0 +1,14 @@ + + + +Generated by Fontastic.me + + + + + + + + + + diff --git a/staticfiles/css/fonts/slick.ttf b/staticfiles/css/fonts/slick.ttf new file mode 100644 index 0000000..9d03461 Binary files /dev/null and b/staticfiles/css/fonts/slick.ttf differ diff --git a/staticfiles/css/fonts/slick.woff b/staticfiles/css/fonts/slick.woff new file mode 100644 index 0000000..8ee9972 Binary files /dev/null and b/staticfiles/css/fonts/slick.woff differ diff --git a/staticfiles/css/slick-theme.css b/staticfiles/css/slick-theme.css new file mode 100644 index 0000000..1232fca --- /dev/null +++ b/staticfiles/css/slick-theme.css @@ -0,0 +1,204 @@ +@charset 'UTF-8'; +/* Slider */ +.slick-loading .slick-list +{ + background: #fff url('./ajax-loader.gif') center center no-repeat; +} + +/* Icons */ +@font-face +{ + font-family: 'slick'; + font-weight: normal; + font-style: normal; + + src: url('./fonts/slick.eot'); + src: url('./fonts/slick.eot?#iefix') format('embedded-opentype'), url('./fonts/slick.woff') format('woff'), url('./fonts/slick.ttf') format('truetype'), url('./fonts/slick.svg#slick') format('svg'); +} +/* Arrows */ +.slick-prev, +.slick-next +{ + font-size: 0; + line-height: 0; + + position: absolute; + top: 50%; + + display: block; + + width: 20px; + height: 20px; + padding: 0; + -webkit-transform: translate(0, -50%); + -ms-transform: translate(0, -50%); + transform: translate(0, -50%); + + cursor: pointer; + + color: transparent; + border: none; + outline: none; + background: transparent; +} +.slick-prev:hover, +.slick-prev:focus, +.slick-next:hover, +.slick-next:focus +{ + color: transparent; + outline: none; + background: transparent; +} +.slick-prev:hover:before, +.slick-prev:focus:before, +.slick-next:hover:before, +.slick-next:focus:before +{ + opacity: 1; +} +.slick-prev.slick-disabled:before, +.slick-next.slick-disabled:before +{ + opacity: .25; +} + +.slick-prev:before, +.slick-next:before +{ + font-family: 'slick'; + font-size: 20px; + line-height: 1; + + opacity: .75; + color: white; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.slick-prev +{ + left: -25px; +} +[dir='rtl'] .slick-prev +{ + right: -25px; + left: auto; +} +.slick-prev:before +{ + content: '←'; +} +[dir='rtl'] .slick-prev:before +{ + content: '→'; +} + +.slick-next +{ + right: -25px; +} +[dir='rtl'] .slick-next +{ + right: auto; + left: -25px; +} +.slick-next:before +{ + content: '→'; +} +[dir='rtl'] .slick-next:before +{ + content: '←'; +} + +/* Dots */ +.slick-dotted.slick-slider +{ + margin-bottom: 30px; +} + +.slick-dots +{ + position: absolute; + bottom: -25px; + + display: block; + + width: 100%; + padding: 0; + margin: 0; + + list-style: none; + + text-align: center; +} +.slick-dots li +{ + position: relative; + + display: inline-block; + + width: 20px; + height: 20px; + margin: 0 5px; + padding: 0; + + cursor: pointer; +} +.slick-dots li button +{ + font-size: 0; + line-height: 0; + + display: block; + + width: 20px; + height: 20px; + padding: 5px; + + cursor: pointer; + + color: transparent; + border: 0; + outline: none; + background: transparent; +} +.slick-dots li button:hover, +.slick-dots li button:focus +{ + outline: none; +} +.slick-dots li button:hover:before, +.slick-dots li button:focus:before +{ + opacity: 1; +} +.slick-dots li button:before +{ + font-family: 'slick'; + font-size: 6px; + line-height: 20px; + + position: absolute; + top: 0; + left: 0; + + width: 20px; + height: 20px; + + content: '•'; + text-align: center; + + opacity: .25; + color: black; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.slick-dots li.slick-active button:before +{ + opacity: .75; + color: black; +} diff --git a/staticfiles/css/slick.css b/staticfiles/css/slick.css new file mode 100644 index 0000000..57477e8 --- /dev/null +++ b/staticfiles/css/slick.css @@ -0,0 +1,119 @@ +/* Slider */ +.slick-slider +{ + position: relative; + + display: block; + box-sizing: border-box; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + -webkit-touch-callout: none; + -khtml-user-select: none; + -ms-touch-action: pan-y; + touch-action: pan-y; + -webkit-tap-highlight-color: transparent; +} + +.slick-list +{ + position: relative; + + display: block; + overflow: hidden; + + margin: 0; + padding: 0; +} +.slick-list:focus +{ + outline: none; +} +.slick-list.dragging +{ + cursor: pointer; + cursor: hand; +} + +.slick-slider .slick-track, +.slick-slider .slick-list +{ + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} + +.slick-track +{ + position: relative; + top: 0; + left: 0; + + display: block; + margin-left: auto; + margin-right: auto; +} +.slick-track:before, +.slick-track:after +{ + display: table; + + content: ''; +} +.slick-track:after +{ + clear: both; +} +.slick-loading .slick-track +{ + visibility: hidden; +} + +.slick-slide +{ + display: none; + float: left; + + height: 100%; + min-height: 1px; +} +[dir='rtl'] .slick-slide +{ + float: right; +} +.slick-slide img +{ + display: block; +} +.slick-slide.slick-loading img +{ + display: none; +} +.slick-slide.dragging img +{ + pointer-events: none; +} +.slick-initialized .slick-slide +{ + display: block; +} +.slick-loading .slick-slide +{ + visibility: hidden; +} +.slick-vertical .slick-slide +{ + display: block; + + height: auto; + + border: 1px solid transparent; +} +.slick-arrow.slick-hidden { + display: none; +} diff --git a/staticfiles/img/car01.png b/staticfiles/img/car01.png new file mode 100644 index 0000000..a2de001 Binary files /dev/null and b/staticfiles/img/car01.png differ diff --git a/staticfiles/img/car02.jpg b/staticfiles/img/car02.jpg new file mode 100644 index 0000000..696ed26 Binary files /dev/null and b/staticfiles/img/car02.jpg differ diff --git a/staticfiles/img/car03.jpg b/staticfiles/img/car03.jpg new file mode 100644 index 0000000..8badda1 Binary files /dev/null and b/staticfiles/img/car03.jpg differ diff --git a/staticfiles/img/car04.jpg b/staticfiles/img/car04.jpg new file mode 100644 index 0000000..62b9eef Binary files /dev/null and b/staticfiles/img/car04.jpg differ diff --git a/staticfiles/img/car05.jpg b/staticfiles/img/car05.jpg new file mode 100644 index 0000000..dc1a93c Binary files /dev/null and b/staticfiles/img/car05.jpg differ diff --git a/staticfiles/img/img01.png b/staticfiles/img/img01.png new file mode 100644 index 0000000..823b782 Binary files /dev/null and b/staticfiles/img/img01.png differ diff --git a/staticfiles/js/slick.js b/staticfiles/js/slick.js new file mode 100644 index 0000000..6a2a099 --- /dev/null +++ b/staticfiles/js/slick.js @@ -0,0 +1,3011 @@ +/* + _ _ _ _ + ___| (_) ___| | __ (_)___ +/ __| | |/ __| |/ / | / __| +\__ \ | | (__| < _ | \__ \ +|___/_|_|\___|_|\_(_)/ |___/ + |__/ + + Version: 1.8.0 + Author: Ken Wheeler + Website: http://kenwheeler.github.io + Docs: http://kenwheeler.github.io/slick + Repo: http://github.com/kenwheeler/slick + Issues: http://github.com/kenwheeler/slick/issues + + */ +/* global window, document, define, jQuery, setInterval, clearInterval */ +;(function(factory) { + 'use strict'; + if (typeof define === 'function' && define.amd) { + define(['jquery'], factory); + } else if (typeof exports !== 'undefined') { + module.exports = factory(require('jquery')); + } else { + factory(jQuery); + } + +}(function($) { + 'use strict'; + var Slick = window.Slick || {}; + + Slick = (function() { + + var instanceUid = 0; + + function Slick(element, settings) { + + var _ = this, dataSettings; + + _.defaults = { + accessibility: true, + adaptiveHeight: false, + appendArrows: $(element), + appendDots: $(element), + arrows: true, + asNavFor: null, + prevArrow: '', + nextArrow: '', + autoplay: false, + autoplaySpeed: 3000, + centerMode: false, + centerPadding: '50px', + cssEase: 'ease', + customPaging: function(slider, i) { + return $('',nextArrow:'',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(e,t){return i(' +
+ + + + + +
+ +
+ +
+ + diff --git a/templates/script.html b/templates/script.html new file mode 100644 index 0000000..0f21ea7 --- /dev/null +++ b/templates/script.html @@ -0,0 +1,39 @@ +{% load static %} + + + + + + + + + + + + diff --git a/templates/seo.html b/templates/seo.html new file mode 100644 index 0000000..cf2452e --- /dev/null +++ b/templates/seo.html @@ -0,0 +1,6 @@ +{% load static %} + + + + + \ No newline at end of file diff --git a/templates/welcome.html b/templates/welcome.html new file mode 100644 index 0000000..743a10d --- /dev/null +++ b/templates/welcome.html @@ -0,0 +1,58 @@ +{% load static %} +
+
+
+
+
+
+
+ + + + + + + + + + + + +

Спейс шаттлы — пилотируемые корабли

+
+
+
+
+ + + + +

Лучшее телескопическое оборудование

+
+
+
+
+ + + + +

Целимся на Луну и Марс

+
+
+
+
+ + + +

Золотая медаль по научным исследованиям

+
+
+
+
+
+ Bootstrap Themes +
+
+
+ +