Содержание книги Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Обоснование выбора среды разработкиСтр 1 из 5Следующая ⇒
Проектирование
Проектирование интерфейса
Интерфейс – общая граница между двумя функциональными объектами, требования к которой определяются стандартом; совокупность средств, методов и правил взаимодействия (управления, контроля и т.д.) между элементами системы. Так как интерфейс – это очень обширное понятие, которое включает в себя множество факторов, рассмотрим самые важные отличительные черты интерфейса: - интерфейс любого программного обеспечения должен быть легко различаем и интуитивно понятен; - интерфейс должен обеспечивать удобство его использования, и не вызывать дискомфорт; - интерфейс не должен мешать работе пользователя и способствовать излишней усталости. [3] В данном курсовом проекте было принято использовать светлую тему оформления с использованием серого декорационного цвета, так как данные цвета не мешают восприятию контента. Данное приложение будет иметь 4 формы и будет содержать следующие элементы: 1) Movie_List – главная форма, которая содержит список фильмов и фильтрацию по: категории, жанрам и годам. 2) Movie_Detail – форма о фильме, на который находится полная информация о выбранном фильме а так же отзывы к фильму. 3) Actor – форма о выбранном актере, на который находится полная информация о актере. 4) Director – форма о выбранном режиссере, на который находится полная информация о режиссере
Инфологическая модель предметной области
Искать фильмы самому или спрашивать у знакомых какой фильм посмотреть долго и муторно. Эту информацию весьма удобно хранить в базе данных, поскольку это обеспечивает быстрый поиск, надежность хранения и, что главное, упрощает поиск. Проанализируем объекты реального мира. Для формирования концептуальной модели необходимо провести идентификацию объектов сущности базы данных. Необходимо спроектировать базу данных поиска, информация из которой будет использоваться для ведения учета фильмов. Для контроля за новинками кино в БД необходимо хранить список всех имеющихся фильмов, их описание. При проектировании БД необходимо учитывать следующее: • новый фильм невозможно добавить, если нет подходящих категорий, жанров, актеров и режиссеров; Таким образом база данных содержит следующие сущности как Фильм, Категории, Жанры, Актеры и Режиссеры.
Связь между сущностями Фильм и Категории, связывает фильм с его категорией. Данная связь позволяет связывать с одной категорией более одного фильма, причем каждый фильм должен быть обязательно связан с категорией. Также данная связь показывает, что каждый фильм может принадлежать только одной категории. Сущность Фильм имеет связь с такими сущностями как Жанр, Актер и Режиссер. Связь между сущностями Фильм и жанр, связывает Фильм и несколько жанров. Данная связь предназначена для организации жанров фильма. Связь между сущностями Фильм и Актер, связывает Актера и фильмы, в которых он принимал участия. Данная связь предназначена для сохранения данных о актере. Связь между сущностями Фильм и Режиссер, связывает Режиссера и фильмы, в которых он принимал участия. Данная связь предназначена для сохранения данных о режиссере.
Логическая модель данных В данном курсовом проекте используется девять таблиц базы данных. Информация о фильмах будет храниться в таблице 3.1.
Таблица 3.1 – Информация о фильмах
Информация о звездах рейтинга будет храниться в таблице 3.2.
Таблица 3.2 – Информация о звездах рейтинга
Информация о категориях будет храниться в таблице 3.3.
Таблица 3.3 – Информация о категориях
Информация о учащихся будет храниться в таблице 3.4.
Таблица 3.4 – Информация о актерах
Информация о режиссерах будет храниться в таблице 3.5.
Таблица 3.5 – Информация о режиссерах
Информация о жанрах будет хранится в таблице 3.6.
Таблица 3.6 – информацию о жанрах
Информация о кадрах из фильмов будет храниться в таблице 3.7.
Таблица 3.7 – Информация о кадрах из фильмов
Информация о рейтинге будет храниться в таблице 3.8.
Таблица 3.8 – Информация о рейтинге
Информация о отзывах будет храниться в таблице 3.9.
Таблица 3.9 – Информация о отзывах
Описание программы
Физическая структура
Данный курсовой проект имеет следующую физическую структуру, что изображено на рисунке 4.1.
Рисунок 4.1 – Физическая структура проекта
Папка movies включает в себя следующие формы: 1) admin – отвечает за панель администратора. 2) apps – отвечает за основные настройки. 3) forms – отображение и добавление рейтинга и отзыва к фильму 4) models – создание базы данных 5) urls – создание url путей 6) views – содержит представление жанров, вывод полного описания фильма, вывод всех фильмов, вывод отзыва и рейтинга, вывод актеров и режиссеров, фильтрацию фильмов, поиск.
Логическая структура
Классы Category, Actor, Director, Genre, Movie, MovieShots, RatingStar, Rating, Reviews содержат метод __str__(self), для вывода данных. Класс Actor, Director, Movie содержат метод get_absolut_url(), для корректного отображения ссылки. Класс Movie содержит метод get_review(), для добавления и вывода отзывов Особенности интерфейса При открытии приложения пользователю отображается главная форма. На данной форме расположены последние добавленные фильмы, фильтрация, поиск, изображённые на рисунке 4.2.
Рисунок 4.2 – Главная форма При выборе фильтров, пользователю выводится результат фильтрации, изображено на рисунке 4.3.
Рисунок 4.3 – Результат фильтрации
При нажатии на кнопку «Поиск», если поле поиска заполнено – пользователю выводятся фильмы с похожим названием, изображено на рисунке 4.4. Рисунок 4.4 – Фильмы с похожим названием
При нажатии на пункт «Отправить», пользователь отправляет свой отзыв к фильму, изображено на рисунке 4.5.
Рисунок 4.5 – Отправка отзыва Условия применения Минимальные системные требования – это набор условий, необходимых для возможности запуска и работы программного продукта. Однако, наличие минимальных системных требований не отменяет возможность запуска ПО на компьютерах, которые по характеристикам слабее минимальных. Минимальные системные требования для запуска приложения: 1) Операционная система: Windows 7 и выше. 2) Процессор: Pentium 4 1 ГГц или более быстрый процессор. 3) Оперативная память: 515 МБ или больше. 4) Свободного места жестком диске: более 1 ГБ. 5) Видеоадаптер: поддерживающая архитектуру DirectX 10 и выше. 6) Видеопамять: 128 МБ или больше. Рекомендуемые системные требования для запуска приложения: 1) Операционная система: Windows 10. 2) Процессор: A6 7310 2.4 ГГЦ. 3) Оперативная память: 8 ГБ. 4) Свободного места жестком диске: более 4 ГБ.
Назначение программы
Данное приложение предназначено для введения учета информации о новинках в киноиндустрии. Оно легка в использовании, так как интерфейс был разработан так, чтобы было интуитивно понятно, в целях того, чтобы пользователю не приходилось искать нужные ему функции. Что бы просмотреть информацию о фильмах, пользователь должен нажать на заинтересовавший его фильм Заключение
Для реализации данного приложения были использованы технологии Django3. В качестве системы управления базами данных выступает DjangoAdmin. Работа в данной базе данных осуществляется при помощи декларативным языком программирования SQLite. Данный декларативный язык программирования в связке с DjangoAdmin эффективно решает проблему передачи, хранения, и стабильного использования данных. Программное средство разработано на объектном ориентированном языке программирования Python, в среде разработки PyCharm. Было проведено множество исследований компонентов программной среды.
При выполнении курсовой работы были выполнены следующие зажачи: 1) Систематизированы знаний в области программирования с использованием языка Python. 2) Изучены декларативного языка программирования SQLite. 3) Углубление и расширение объема знаний и умений программирования на объектно-ориентированном языке Python в среде разработки программ PyCharm. 4) Сформированы умения и навыков самостоятельной организации исследовательской работы. 5) Сформированы современные методы поиска, обработки и использования информации. 6) Анализ похожих программ на просторе интернета. 7) Углублены знаний и умений в использовании технологии построения веб приложений Django3. Проект может быть доработан путём оптимизации кода с использованием более производительных конструкций кода программы. А также добавлением нового функционала в приложении.
Приложение А (обязательное) Листинг программы
from django.db.models import Q from django.http import JsonResponse, HttpResponse from django.shortcuts import redirect from django.views.generic import ListView, DetailView from django.views.generic.base import View
from.models import Movie, Category, Actor, Director, Genre, Rating, Reviews from.forms import ReviewForm, RatingForm
class GenreYear: """Жанры и года выхода фильмов""" def get_genres(self): return Genre.objects.all()
def get_years(self): return Movie.objects.filter(draft=False).values("year").distinct()
class MoviesView(GenreYear, ListView): """Список фильмов""" model = Movie queryset = Movie.objects.filter(draft=False) paginate_by = 6
class MovieDetailView(GenreYear, DetailView): """Полное описание фильма""" model = Movie queryset = Movie.objects.filter(draft=False) slug_field = "url"
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context["star_form"] = RatingForm() return context
class AddReview(View): """Отзывы""" def post(self, request, pk): form = ReviewForm(request.POST) movie = Movie.objects.get(id=pk) if form.is_valid(): form = form.save(commit=False) if request.POST.get("parent", None): form.parent_id = int(request.POST.get("parent")) form.movie = movie form.save() return redirect(movie.get_absolute_url())
class ActorView(GenreYear, DetailView): """Вывод информации о актере""" model = Actor template_name = 'movies/actor.html' slug_field = "name"
class DirectorView(DetailView): """Вывод информации о Director""" model = Director template_name = 'movies/director.html' slug_field = "name"
class FilterMoviesView(GenreYear, ListView): """Фильтр фильмов""" paginate_by = 3
def get_queryset(self): queryset = Movie.objects.filter( Q(year__in=self.request.GET.getlist("year")) | Q(category__in=self.request.GET.getlist("category")) | Q(genres__in=self.request.GET.getlist("genre")) ).distinct() return queryset
def get_context_data(self, *args, **kwargs): context = super().get_context_data(*args, **kwargs) context["year"] = ''.join([f"year={x}&" for x in self.request.GET.getlist("year")]) context["category"] = ''.join([f"category={x}&" for x in self.request.GET.getlist("category")]) context["genre"] = ''.join([f"genre={x}&" for x in self.request.GET.getlist("genre")])
return context
class JsonFilterMoviesView(ListView): """Фильтр фильмов в json""" def get_queryset(self): queryset = Movie.objects.filter( Q(year__in=self.request.GET.getlist("year")) | Q(category__in=self.request.GET.getlist("category")) | Q(genres__in=self.request.GET.getlist("genre")) ).distinct().values("title", "tagline", "url", "poster") return queryset
def get(self, request, *args, **kwargs): queryset = list(self.get_queryset()) return JsonResponse({"movies": queryset}, safe=False)
class AddStarRating(View): """Добавление рейтинга фильму""" def get_client_ip(self, request): x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') if x_forwarded_for: ip = x_forwarded_for.split(',')[0] else: ip = request.META.get('REMOTE_ADDR') return ip
def post(self, request): form = RatingForm(request.POST) if form.is_valid(): Rating.objects.update_or_create( ip=self.get_client_ip(request), movie_id=int(request.POST.get("movie")), defaults={'star_id': int(request.POST.get("star"))} ) return HttpResponse(status=201) else: return HttpResponse(status=400)
class Search(ListView): """Поиск фильмов""" paginate_by = 6
def get_queryset(self): return Movie.objects.filter(title__icontains=self.request.GET.get("q"))
def get_context_data(self, *args, **kwargs): context = super().get_context_data(*args, **kwargs) context["q"] = f'q={self.request.GET.get("q")}&' return context
from django import forms
from.models import Reviews, Rating, RatingStar
class ReviewForm(forms.ModelForm): """Форма отзывов""" class Meta: model = Reviews fields = ("name", "email", "text")
class RatingForm(forms.ModelForm): """Форма добавления рейтинга""" star = forms.ModelChoiceField( queryset=RatingStar.objects.all(), widget=forms.RadioSelect(), empty_label=None )
class Meta: model = Rating fields = ("star",)
from django import forms from django.contrib import admin from django.utils.safestring import mark_safe
from.models import Category, Genre, Movie, MovieShots, Actor, Rating, RatingStar, Reviews, Director
from ckeditor_uploader.widgets import CKEditorUploadingWidget
class MovieAdminForm(forms.ModelForm): description = forms.CharField(label="Описание", widget=CKEditorUploadingWidget())
class Meta: model = Movie fields = '__all__'
@admin.register(Category) class CategoryAdmin(admin.ModelAdmin): """Категории""" list_display = ("id", "name", "url") list_display_links = ("name",)
class ReviewInline(admin.TabularInline): """Отзывы на странице фильма""" model = Reviews extra = 1 readonly_fields = ("name", "email")
class MovieShotsInline(admin.TabularInline): model = MovieShots extra = 1 readonly_fields = ("get_image",)
def get_image(self, obj): return mark_safe(f'<img src={obj.image.url} height="110"')
get_image.short_description = "Изображение"
@admin.register(Movie) class MovieAdmin(admin.ModelAdmin): """Фильмы""" list_display = ("title", "category", "url", "draft") list_filter = ("category", "year") search_fields = ("title", "category__name") inlines = [MovieShotsInline, ReviewInline] save_on_top = True save_as = True list_editable = ("draft",) actions = ["publish", "unpublish"] form = MovieAdminForm readonly_fields = ("get_image",) fieldsets = ( (None, { "fields": (("title", "tagline"),) }), (None, { "fields": ("description", ("poster", "get_image")) }), (None, { "fields": (("year", "world_premiere", "country"),) }), ("Actors", { "classes": ("collapse",), "fields": (("actors", "directors", "genres", "category"),) }), (None, { "fields": (("budget", "fees_in_usa", "fess_in_world"),) }), ("Options", { "fields": (("url", "draft"),) }), )
def get_image(self, obj): return mark_safe(f'<img src={obj.poster.url} height="110"')
def unpublish(self, request, queryset): row_update = queryset.update(draft=True) if row_update == 1: message_bit = "1 запись была обновлена" else: message_bit = f"{row_update} записей были обновлены" self.message_user(request, f"{message_bit}")
def publish(self, request, queryset): """Опубликовать""" row_update = queryset.update(draft=False) if row_update == 1: message_bit = "1 запись была обновлена" else: message_bit = f"{row_update} записей были обновлены" self.message_user(request, f"{message_bit}")
publish.short_description = "Опубликовать" publish.allowed_permissions = ('change',)
unpublish.short_description = "Снять с публикации" unpublish.allowed_permissions = ('change',)
get_image.short_description = "Постер"
@admin.register(Reviews) class ReviewAdmin(admin.ModelAdmin): """Отзывы""" list_display = ("name", "email", "parent", "movie", "id") readonly_fields = ("name", "email")
@admin.register(Genre) class GenreAdmin(admin.ModelAdmin): """Жанры""" list_display = ("name", "url")
@admin.register(Actor) class ActorAdmin(admin.ModelAdmin): """Актеры""" list_display = ("name", "age", "get_image") readonly_fields = ("get_image",)
def get_image(self, obj): return mark_safe(f'<img src={obj.image.url} height="60"')
get_image.short_description = "Изображение"
@admin.register(Director) class DirectorAdmin(admin.ModelAdmin): """Режиссеры""" list_display = ("name", "age", "get_image") readonly_fields = ("get_image",)
def get_image(self, obj): return mark_safe(f'<img src={obj.image.url} height="60"')
get_image.short_description = "Изображение"
@admin.register(Rating) class RatingAdmin(admin.ModelAdmin): """Рейтинг""" list_display = ("star", "movie", "ip")
@admin.register(MovieShots) class MovieShotsAdmin(admin.ModelAdmin): """Кадры из фильма""" list_display = ("title", "movie", "get_image") readonly_fields = ("get_image",)
def get_image(self, obj): return mark_safe(f'<img src={obj.image.url} height="60"')
get_image.short_description = "Изображение"
admin.site.register(RatingStar)
admin.site.site_title = "WikiFilms" admin.site.site_header = "WikiFilms"
function ajaxSend(url, params) { // Отправляем запрос fetch(`${url}?${params}`, { method: 'GET', headers: { 'Content-Type': 'application/x-www-form-urlencoded', }, }) .then(response => response.json()) .then(json => render(json)) .catch(error => console.error(error)) }
function render(data) { // Рендер шаблона let template = Hogan.compile(html); let output = template.render(data);
const div = document.querySelector('.left-ads-display>.row'); div.innerHTML = output; }
let html = '\ {{#movies}}\ <div class="col-md-4 product-men">\ <div class="product-shoe-info editContent text-center mt-lg-4">\ <div class="men-thumb-item">\ <img src="media/{{ poster }}" class="img-fluid" alt="">\ </div>\ <div class="item-info-product">\ <h4 class="">\ <a href="/{{ url }}" class="editContent">{{ title }}</a>\ </h4>\ <div class="product_price">\ <div class="grid-price">\ <span class="money editContent">{{ tagline }}</span>\ </div>\ </div>\ <ul class="stars">\ <li><a href="#"><span class="fa fa-star" aria-hidden="true"></span></a></li>\ <li><a href="#"><span class="fa fa-star" aria-hidden="true"></span></a></li>\ <li><a href="#"><span class="fa fa-star-half-o" aria-hidden="true"></span></a></li>\ <li><a href="#"><span class="fa fa-star-half-o" aria-hidden="true"></span></a></li>\ <li><a href="#"><span class="fa fa-star-o" aria-hidden="true"></span></a></li>\ </ul>\ </div>\ </div>\ </div>\ {{/movies}}'
// Add star rating const rating = document.querySelector('form[name=rating]');
rating.addEventListener("change", function (e) { // Получаем данные из формы let data = new FormData(this); fetch(`${this.action}`, { method: 'POST', body: data }) .then(response => alert("Рейтинг установлен")) .catch(error => alert("Ошибка")) });
{% extends 'movies/base.html' %} {% load static %} {% block title %} {{ actor.name }} {% endblock title %} {% block container %} <div class="container py-md-3"> {% endblock container %}
{% block sidebar %} <div class="side-bar col-lg-4"> {% endblock sidebar %}
{% block movie %} <div class="left-ads-display col-lg-8"> <div class="row"> <div class="desc1-left col-md-6"> <img src="{{ actor.image.url }}" class="img-fluid" alt=""> </div> <div class="desc1-right col-md-6 pl-lg-4"> <h3 class="editContent"> {{ movie.title }} </h3> <h5 class="editContent"></h5> <ul> <li> <span><b>Возраст:</b> {{ actor.age }} лет</span> </li> <li><span><b>Актер:</b> {% for movie in actor.film_actor.all %} {{ movie.title }} {% endfor %} </span> </li> </ul> </div> </div> <div class="row sub-para-w3layouts mt-5"> <h3 class="shop-sing editContent"> О {{ actor.name }} </h3> <p class="editContent"> {{ actor.description|safe }} </p> </div> </div> {% endblock movie %}
{% extends 'base.html' %} {% block title %} {% endblock title %} {% block content %} <section class="ab-info-main py-md-5 py-4 editContent" style="padding-left: 3rem; padding-right: 3rem;"> {% block container %} <div class="container-fluid py-md-3"> {% endblock container %} <div class="row"> {% block sidebar %} <div class="side-bar col-lg-3"> {% endblock sidebar %} {% include 'include/sidebar.html' %} </div> {% block movie %} {% endblock movie %} </div> </div> </section> {% endblock content %}
{% extends 'movies/base.html' %} {% load static %} {% block title %} {{ director.name }} {% endblock title %} {% block container %} <div class="container py-md-3"> {% endblock container %}
{% block sidebar %} <div class="side-bar col-lg-4"> {% endblock sidebar %}
{% block movie %} <div class="left-ads-display col-lg-8"> <div class="row"> <div class="desc1-left col-md-6"> <img src="{{ director.image.url }}" class="img-fluid" alt=""> </div> <div class="desc1-right col-md-6 pl-lg-4"> <h3 class="editContent"> {{ movie.title }} </h3> <h5 class="editContent"></h5> <ul> <li> <span><b>Возраст:</b> {{ director.age }} лет</span></li> <li> <span><b>Режиссер:</b> {% for movie in director.film_director.all %} {{ movie.title }} {% endfor %} </span> </li> </li> </ul> </div> </div> <div class="row sub-para-w3layouts mt-5"> <h3 class="shop-sing editContent"> О {{ director.name }} </h3> <p class="editContent"> {{ director.description|safe }} </p> </div> </div> {% endblock movie %}
{% extends 'movies/base.html' %} {% load static %} {% block title %} {{ movie.title }} {% endblock title %} {% block container %} <div class="container py-md-3"> {% endblock container %}
{% block sidebar %} <div class="side-bar col-lg-4"> {% endblock sidebar %}
{% block movie %} <div class="left-ads-display col-lg-8"> <div class="row"> <div class="desc1-left col-md-6"> <img src="{{ movie.poster.url }}" class="img-fluid" alt=""> </div> <div class="desc1-right col-md-6 pl-lg-4"> <h3 class="editContent"> {{ movie.title }} </h3> <h5 class="editContent"></h5> <ul> <li style="list-style: none"> <span><b>Год:</b> {{ movie.year }}</span></li> <li style="list-style: none"> <span><b>Страна:</b> {{ movie.country }}</span> </li> <li style="list-style: none"> <span><b>Слоган:</b> {{ movie.tagline }}</span> </li> <li style="list-style: none"> <span><b>Режиссер:</b> {% for director in movie.directors.all %} <a href="{{ director.get_absolute_url }}"> {{ director.name }} </a> {% endfor %} </span> </li> <li style="list-style: none"><span><b>Актеры:</b> {% for actor in movie.actors.all %} <a href="{{ actor.get_absolute_url }}"> {{ actor.name }} </a> {% endfor %} </span> </li> <li style="list-style: none"><span><b>Жанр:</b> {% for genre in movie.genres.all %} {{ genre.name }} {% endfor %} </span> </li> <li style="list-style: none"> <span><b>Премьера в мире:</b> {{ movie.world_premiere }}</span> </li> <li style="list-style: none"> <span><b>Бюджет:</b> ${{ movie.budget }}</span></li> <li style="list-style: none"> <span><b>Сборы в США:</b> ${{ movie.fees_in_usa }}</span></li> <li style="list-style: none"> <span><b>Сборы в мире:</b> ${{ movie.fess_in_world }}</span> </li> <li style="list-style: none"> <form action="{% url 'add_rating' %}" method="post" name="rating"> <b>Рейтинг:</b> {% csrf_token %} <input type="hidden" value="{{ movie.id }}" name="movie"> <span class="rating"> {% for k, v in star_form.fields.star.choices %} <input id="rating{{ v }}" type="radio" name="star" value="{{ k }}"> <label for="rating{{ v }}">{{ v }}</label> {% endfor %} </span> <span class="editContent">{{ k }} </span> </form> </li> </ul> </div> </div>
<div class="row sub-para-w3layouts mt-5">
<h3 class="shop-sing editContent"> О фильме {{ movie.title }} </h3> <p> {% for image in movie.movieshots_set.all %} <img src="{{ image.image.url }}" class="img-movie-shots " alt="{{ image.description }}"> {% endfor %} </p> <p class="editContent"> {{ movie.description|safe }} </p> </div> <hr> <div class="row"> <div class="single-form-left"> <!-- contact form grid --> <div class="contact-single"> <h3 class="editContent"> <span class="sub-tittle editContent">{{ movie.reviews_set.count }}</span>Оставить отзыв</h3> <form action="{% url 'add_review' movie.id %}" method="post" class="mt-4" id="formReview"> {% csrf_token %} <input type="hidden" name="parent" id="contactparent" value=""> <div class="form-group editContent"> <label for="contactcomment" class="editContent"> Ваш комментарий * </label> <textarea class="form-control border" rows="5" name="text" id="contactcomment" required=""></textarea> </div> <div class="d-sm-flex"> <div class="col-sm-6 form-group p-0 editContent"> <label for="contactusername" class="editContent"> Имя * </label> <input type="text" class="form-control border" name="name" id="contactusername" required=""> </div> <div class="col-sm-6 form-group ml-sm-3 editContent"> <label for="contactemail" class="editContent"> Email * </label> <input type="email" class="form-control border" name="email" id="contactemail" required=""> </div> </div> <button type="submit" class="mt-3 btn btn-success btn-block py-3"> Отправить </button> </form> </div> <!-- //contact form grid ends here --> </div> </div> {% for review in movie.get_review %} <div class="media py-5"> <img src="{% static 'images/te.png' %}" class="mr-3 img-fluid" alt="image"> <div class="media-body mt-4"> <h5 class="mt-0 editContent"> {{ review.name }} </h5> <p class="mt-2 editContent"> {{ review.text }} </p> <a href="#formReview" onclick="addReview('{{ review.name }}', '{{ review.id }}')">Ответить</a> {% for rew in review.reviews_set.all %} <div class="media mt-5 editContent"> <a class="pr-3" href="#"> <img src="{% static 'images/te.png' %}" class="img-fluid " alt="image"> </a> <div class="media-body"> <h5 class="mt-0 editContent">{{ rew.name }}</h5> <p class="mt-2 editContent">{{ rew.text }}</p> </div> </div> {% endfor %} </div> </div> {% endfor %} </div> <script> function addReview(name, id) { document.getElementById("contactparent").value = id; document.getElementById("contactcomment").innerText = `${name}, ` }
</script> {% endblock movie %}
{% extends 'movies/base.html' %} {% block title %} {% endblock title %} {% block header %} bg1 {% endblock header %} {% block movie %} <div class="left-ads-display col-lg-9"> <div class="row"> {% for movie in movie_list %} <div class="col-md-4 product-men"> <div class="product-shoe-info editContent text-center mt-lg-4"> <div class="men-thumb-item"> <img src="{{ movie.poster.url }}" class="img-fluid" alt=""> </div> <div class="item-info-product"> <h4 class=""> <a href="{{ movie.get_absolute_url }}" class="editContent"> {{ movie.title }} </a> </h4>
<div class="product_price"> <div class="grid-price"> <span class="money editContent">{{ movie.tagline }}</span> </div> </div>
</div> </div> </div> {% endfor %} </div> <d
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-05-12; просмотров: 139; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.118.20.68 (0.012 с.) |