Список использованных источников. 1) Ромель А.П, Финкова М.А., Матвеев М.Д., Наука и техника, 2016 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Список использованных источников. 1) Ромель А.П, Финкова М.А., Матвеев М.Д., Наука и техника, 2016



 

1) Ромель А.П, Финкова М.А., Матвеев М.Д., Наука и техника, 2016,   336 c.

2) https://habr.com/ru/post/122018/

3) Купер А., Рейманн Р., Кронин Д., Носсел К. Интерфейс. Основы проектирования взаимодействия. 4 изд. — Питер, 2017. — 720 с.

4) Руссинович Марк, Соломон Дэвид, Алекс Ионеску, Питер, Всё о Windows 10, 2018, 944 c.

5) Пирс Б. Типы в языках программирования. — Добросвет, 2012. — 680 с.


 

Приложение А

(обязательное)

Листинг программы

 

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>

   <div class="grid-img-right mt-4 text-right bg bg1" >

       {% include 'include/pagination.html' %}

   </div>

</div>

{% endblock movie %}

 

<div class="deal-leftmk left-side">

<h3 class="sear-head editContent">Последние добавленные</h3>

{% for movie in last_movies %}

<div class="special-sec1 row mt-3 editContent">

       <div class="img-deals col-md-4">

           <img src="{{ movie.poster.url }}" class="img-fluid" alt="">

       </div>       

       <a href="{{ movie.get_absolute_url }}">

 

       <div class="img-deal1 col-md-4">

           <h3 class="editContent">{{ movie.title }}</h3>

           <a href="{{ movie.get_absolute_url }}" class="editContent"></a>

       </div>

   </a>

</div>

{% endfor %}

</div>

 

{% load movie_tag %}

<header class="header">

<div class="container-fluid px-lg-5">

   <!-- nav -->

   <nav class="py-4">

       <div id="logo">

           <h1><a href="/" class="editContent"

                  style="outline: none; outline-offset: -2px; cursor: inherit; color: rgb(255, 255, 255); font-size: 40px; background-color: rgba(0, 0, 0, 0); font-family: Source Sans Pro; sans-serif;">WikiFilms</a>

           </h1>

       </div>

 

       <!-- <label for="drop" class="toggle">Menu</label>

       <input type="checkbox" id="drop">

       <ul class="menu mt-2">

           <li class="active"><a href="/">Главная</a></li>

           <li>

               <!-- First Tier Drop Down

               <label for="drop-2" class="toggle">Категории <span

                       class="fa fa-angle-down" aria-hidden="true"></span> </label>

               <a href="#">Категории <span class="fa fa-angle-down"

                                           aria-hidden="true"></span></a>

               <input type="checkbox" id="drop-2">

               <ul>

                   {% get_categories as categories %}

                   {% for category in categories %}

                       <li><a href="/">{{ category.name }}</a></li>

                   {% endfor %}

               </ul>

           </li>

           <li><a href="contact.html"

                  style="color: rgb(255, 255, 255); font-weight: 700; text-transform: uppercase;">Вход</a>

           </li>

       </ul> -->

   </nav>

   <!-- //nav -->

</div>

</header>

<!-- //header -->

<!--/banner-->

<div class="banner-info">

<h3 class="mb-4 editContent">Все о кино</h3>

<div class="ban-buttons">

 

</div>

</div>

<!--// banner-inner -->

 

<ul class="pagination">

{% if page_obj.has_previous %}

   {% if page_obj.number|add:'-3' > 1 %}

       <li class="pagination__item">

           <a href="?{{ q }}{{ genre }}{{ year }}page=1">1</a>

       </li>

   {% endif %}

   {% if page_obj.number|add:'-3' >= 3 %}

       <li class="pagination__item pagination__item--dots">

               <a href="?{{ q }}{{ genre }}{{ year }}page={{ page_obj.previous_page_number|add:'-3' }}">

           <span class="pagination__link">• • •</span>

           </a>

       </li>

   {% endif %}

{% endif %}

{% if paginator.page_range|length > 1 %}

   {% for i in paginator.page_range %}

       {% if page_obj.number == i %}

           <li class="pagination__item active">

               <a class="pagination__link" href="#">{{ i }}</a>

           </li>

       {% elif i > page_obj.number|add:'-4' and i < page_obj.number|add:'4' %}

           <li class="pagination__item">

                   <a class="pagination__link" href="?{{ q }}{{ genre }}{{ year }}page={{ i }}">{{ i }}</a>

           </li>

       {% endif %}

   {% endfor %}

{% endif %}

{% if page_obj.has_next %}

   {% if page_obj.number|add:'4' < page_obj.paginator.num_pages %}

       <li class="pagination__item pagination__item--dots">

               <a href="?{{ q }}{{ genre }}{{ year }}page={{ page_obj.next_page_number|add:'3' }}">

           <span class="pagination__link">• • •</span>

           </a>

       </li>

   {% endif %}

   {% if page_obj.number|add:'3' < page_obj.paginator.num_pages %}

       <li class="pagination__item">

               <a class="pagination__link" href="?{{ q }}{{ genre }}{{ year }}page={{ page_obj.paginator.num_pages }}">

                   {{ page_obj.paginator.num_pages }}

               </a>

       </li>

   {% endif %}

{% endif %}

</ul>

 

{% load movie_tag %}

<div class="search-bar w3layouts-newsletter">

<h3 class="sear-head editContent">Поиск фильма</h3>

<form action="{% url 'search' %}" method="get" class="d-flex editContent">

   <input type="search" placeholder="Введите название..." name="q"

          class="form-control" required="">

   <button type="submit" class="btn1 btn"><span class="fa fa-search"

                                  aria-hidden="true"></span></button>

</form>

</div>

 

<!--preference -->

<form action="{% url 'filter' %}" method="get" name="filter">

<div class="left-side my-4">

   <h3 class="sear-head editContent">Жанры</h3>

   <ul class="w3layouts-box-list">

       {% for genre in view.get_genres %}

           <li class="editContent">

               <input type="checkbox" class="checked" name="genre" value="{{ genre.id }}">

               <span class="span editContent">{{ genre.name }}</span>

           </li>

       {% endfor %}

   </ul>

</div>

<!-- // preference -->

 

<!-- Category -->

<div class="left-side my-4">

   <h3 class="sear-head editContent">Категории</h3>

   <ul class="w3layouts-box-list">

       {% get_categories as categories %}

       {% for category in categories %}

           <li class="editContent">

               <input type="checkbox" class="checked" name="category" value="{{ category.id }}">

               <span class="span editContent">{{ category.name }}</span>

           </li>

       {% endfor %}

   </ul>

</div>

<!-- //category -->

 

<!-- discounts -->

<div class="left-side">

   <h3 class="sear-head editContent">Год</h3>

   <ul class="w3layouts-box-list">

       {% for movie in view.get_years %}

       <li class="editContent">

           <input type="checkbox" class="checked" name="year" value="{{ movie.year }}">

           <span class="span editContent">{{ movie.year }}</span>

       </li>

       {% endfor %}

   </ul>

</div>

<button class="btn1 btn" type="submit">Найти</button>

</form>

<hr>

{% get_last_movies count=4 %}

 

from django import template

from movies.models import Category, Movie

 

register = template.Library()

 

@register.simple_tag()

def get_categories():

"""Вывод всех категорий"""

return Category.objects.all()

 

@register.inclusion_tag('movies/tags/last_movie.html')

def get_last_movies(count=5):

movies = Movie.objects.order_by("id")[:count]

return {"last_movies": movies}

 

from django.urls import path

 

from. import views

 

urlpatterns = [

path("", views.MoviesView.as_view()),

path("filter/", views.FilterMoviesView.as_view(), name='filter'),   

path("search/", views.Search.as_view(), name='search'),

path("add-rating/", views.AddStarRating.as_view(), name='add_rating'),   

path("json-filter/", views.JsonFilterMoviesView.as_view(), name='json_filter'),

path("<slug:slug>/", views.MovieDetailView.as_view(), name="movie_detail"),

path("review/<int:pk>/", views.AddReview.as_view(), name="add_review"),

path("actor/<str:slug>/", views.ActorView.as_view(), name="actor_detail"),

path("director/<str:slug>/", views.DirectorView.as_view(), name="director_detail"),

]



Поделиться:


Последнее изменение этой страницы: 2021-05-12; просмотров: 61; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.188.11 (0.666 с.)