Ahí viene el nuevo frontend (de nuevo) #2
|
@ -6,3 +6,4 @@ httpx
|
||||||
django-tastypie
|
django-tastypie
|
||||||
django-admin-list-filter-dropdown
|
django-admin-list-filter-dropdown
|
||||||
wikipedia-api
|
wikipedia-api
|
||||||
|
bs4
|
||||||
|
|
|
@ -3,6 +3,7 @@ import shutil
|
||||||
import random
|
import random
|
||||||
import time
|
import time
|
||||||
import wikipediaapi
|
import wikipediaapi
|
||||||
|
from bs4 import BeautifulSoup
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
@ -114,7 +115,7 @@ class MovieQuerySet(models.QuerySet):
|
||||||
"Mejor valorados": self.fix_all_data(self.top_random_pick("stars")),
|
"Mejor valorados": self.fix_all_data(self.top_random_pick("stars")),
|
||||||
"Más descargados": self.fix_all_data(self.top_pick("count")),
|
"Más descargados": self.fix_all_data(self.top_pick("count")),
|
||||||
}
|
}
|
||||||
sections['genders'] = {}
|
sections["genders"] = {}
|
||||||
return sections
|
return sections
|
||||||
|
|
||||||
def fix_all_data(self, movies):
|
def fix_all_data(self, movies):
|
||||||
|
@ -129,7 +130,7 @@ class MovieQuerySet(models.QuerySet):
|
||||||
movie["file_name"] = self.fix_path(movie["file_name"])
|
movie["file_name"] = self.fix_path(movie["file_name"])
|
||||||
movie["cartel"] = self.fix_path(movie["cartel"])
|
movie["cartel"] = self.fix_path(movie["cartel"])
|
||||||
if wikipedia:
|
if wikipedia:
|
||||||
movie['wiki'] = self.get_wiki(movie)
|
movie["wiki"] = self.get_wiki(movie)
|
||||||
|
|
||||||
def fix_path(self, el):
|
def fix_path(self, el):
|
||||||
if settings.DEBUG:
|
if settings.DEBUG:
|
||||||
|
@ -138,8 +139,11 @@ class MovieQuerySet(models.QuerySet):
|
||||||
return settings.MEDIA_ROOT / el
|
return settings.MEDIA_ROOT / el
|
||||||
|
|
||||||
def fix_summ(self, raw):
|
def fix_summ(self, raw):
|
||||||
# TODO: quitar .reference
|
html = BeautifulSoup(raw, "lxml")
|
||||||
return raw
|
for ref in html.find_all("sup", "reference"):
|
||||||
|
ref.decompose()
|
||||||
|
clean = list(map(lambda x: str(x), html.body.children))
|
||||||
|
return " ".join(clean)
|
||||||
|
|
||||||
def format_stars(self, num):
|
def format_stars(self, num):
|
||||||
stars = "★" * num
|
stars = "★" * num
|
||||||
|
@ -155,17 +159,17 @@ class MovieQuerySet(models.QuerySet):
|
||||||
return time.strftime("%H:%M", time.gmtime(secs))
|
return time.strftime("%H:%M", time.gmtime(secs))
|
||||||
|
|
||||||
def get_wiki(self, movie, again=True):
|
def get_wiki(self, movie, again=True):
|
||||||
wiki = self.get_wiki_page(movie['original_name'])
|
wiki = self.get_wiki_page(movie["original_name"])
|
||||||
if not wiki:
|
if not wiki:
|
||||||
wiki = self.get_wiki_page(movie['name'])
|
wiki = self.get_wiki_page(movie["name"])
|
||||||
return wiki
|
return wiki
|
||||||
|
|
||||||
|
|
||||||
def get_wiki_page(self, title):
|
def get_wiki_page(self, title):
|
||||||
try:
|
try:
|
||||||
lang = settings.LANGUAGE_CODE.split('-')[0]
|
lang = settings.LANGUAGE_CODE.split("-")[0]
|
||||||
wiki = wikipediaapi.Wikipedia(lang,
|
wiki = wikipediaapi.Wikipedia(
|
||||||
extract_format=wikipediaapi.ExtractFormat.HTML)
|
lang, extract_format=wikipediaapi.ExtractFormat.HTML
|
||||||
|
)
|
||||||
page = wiki.page(title)
|
page = wiki.page(title)
|
||||||
if page.exists():
|
if page.exists():
|
||||||
return {
|
return {
|
||||||
|
@ -175,7 +179,7 @@ class MovieQuerySet(models.QuerySet):
|
||||||
}
|
}
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
except NameError:
|
except:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_movie(self, id):
|
def get_movie(self, id):
|
||||||
|
@ -185,7 +189,6 @@ class MovieQuerySet(models.QuerySet):
|
||||||
return movie
|
return movie
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def upload_cartel(instance, filename):
|
def upload_cartel(instance, filename):
|
||||||
first = filename[0].upper()
|
first = filename[0].upper()
|
||||||
if first.isdigit():
|
if first.isdigit():
|
||||||
|
|
|
@ -16,6 +16,21 @@ def search(request):
|
||||||
return render(request, "search.html", context)
|
return render(request, "search.html", context)
|
||||||
|
|
||||||
|
|
||||||
|
def about(request):
|
||||||
|
context = {}
|
||||||
|
return render(request, "about.html", context)
|
||||||
|
|
||||||
|
|
||||||
|
def bugs(request):
|
||||||
|
context = {}
|
||||||
|
return render(request, "bugs.html", context)
|
||||||
|
|
||||||
|
|
||||||
def movie(request, id):
|
def movie(request, id):
|
||||||
context = {"movie": Movie.objects.get_movie(id)}
|
context = {"movie": Movie.objects.get_movie(id)}
|
||||||
return render(request, "movie.html", context)
|
return render(request, "movie.html", context)
|
||||||
|
|
||||||
|
|
||||||
|
def movies(request, key):
|
||||||
|
context = {"sections": {"Llave": "Valor"}}
|
||||||
|
return render(request, "movies.html", context)
|
||||||
|
|
|
@ -18,7 +18,9 @@ v1_api.register(ResourceMovies())
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path("", views.home, name="home"),
|
path("", views.home, name="home"),
|
||||||
path("search/", views.search, name="search"),
|
path("search/", views.search, name="search"),
|
||||||
# path('movies/<str:args>', views.movies, name='movies'),
|
path("about/", views.about, name="about"),
|
||||||
|
path("bugs/", views.bugs, name="bugs"),
|
||||||
|
path("movies/<str:key>", views.movies, name="movies"),
|
||||||
path("movie/<int:id>", views.movie, name="movie"),
|
path("movie/<int:id>", views.movie, name="movie"),
|
||||||
path("ultimas/rss/", LatestMoviesFeed()),
|
path("ultimas/rss/", LatestMoviesFeed()),
|
||||||
path("admin/", admin.site.urls),
|
path("admin/", admin.site.urls),
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<b>TODO: Acerca</b>
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -0,0 +1,7 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<b>TODO: Reporta un problema</b>
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -0,0 +1,43 @@
|
||||||
|
<div class="hero-body movie-body">
|
||||||
|
{% if request.get_full_path == "/" %}
|
||||||
|
<div class="stats">
|
||||||
|
<p class="stars">{{ movie.stars_icons }}</p>
|
||||||
|
<p><i class="gg-time"></i>{{ movie.duration_formatted }}</p>
|
||||||
|
<p><i class="gg-software-download"></i>{{ movie.count_formatted }}</p>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="about">
|
||||||
|
<div class="columns is-desktop">
|
||||||
|
<div class="column">
|
||||||
|
<h2 class="subtitle">Cartel</h2>
|
||||||
|
<figure>
|
||||||
|
<img src="{{ movie.cartel }}">
|
||||||
|
</figure>
|
||||||
|
</div>
|
||||||
|
<div class="column">
|
||||||
|
<h2 class="subtitle">Ficha técnica</h2>
|
||||||
|
<table class="table infobox">
|
||||||
|
<tbody>
|
||||||
|
<tr><td>Título original</td><td>{{ movie.original_name }}<td></tr>
|
||||||
|
<tr><td>Año</td><td>{{ movie.year }}<td></tr>
|
||||||
|
<tr><td>País</td><td>{{ movie.countries }}<td></tr>
|
||||||
|
<tr><td>Duración</td><td>{{ movie.duration }} min<td></tr>
|
||||||
|
<tr><td>Dirección</td><td>{{ movie.directors }}<td></tr>
|
||||||
|
<tr><td>Reparto</td><td>{{ movie.actors }}<td></tr>
|
||||||
|
<tr><td>Género</td><td>{{ movie.genders }}<td></tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% if movie.wiki.summary %}
|
||||||
|
<h2 class="subtitle">Sinopsis de <a href="{{ movie.wiki.url }}" target="_blank">Wikipedia</a></h2>
|
||||||
|
{{ movie.wiki.summary | safe }}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
{% if user.is_superuser %}
|
||||||
|
<video controls>
|
||||||
|
<source src="{{ movie.file_name }}" type="video/mp4">
|
||||||
|
</video>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
|
@ -0,0 +1,12 @@
|
||||||
|
<div class="hero-foot">
|
||||||
|
<nav class="tabs is-boxed is-fullwidth">
|
||||||
|
<div class="container">
|
||||||
|
<ul>
|
||||||
|
<li><a href="{{ movie.file_name }}" target="_blank" download>Descargar</a></li>
|
||||||
|
{% if request.get_full_path == "/" %}
|
||||||
|
<li><a href="/movie/{{ movie.id }}">Detalles</a></li>
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
|
</div>
|
|
@ -0,0 +1,10 @@
|
||||||
|
<div class="hero-head movie-head">
|
||||||
|
<p class="title">{{ movie.name }}</p>
|
||||||
|
{% if request.get_full_path != "/" %}
|
||||||
|
<p class="stats">
|
||||||
|
<span class="stars">{{ movie.stars_icons }}</span>
|
||||||
|
<span><i class="gg-time"></i>{{ movie.duration_formatted }}</span>
|
||||||
|
<span><i class="gg-software-download"></i>{{ movie.count_formatted }}</span>
|
||||||
|
</p>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
|
@ -1,88 +1,5 @@
|
||||||
<section class="hero {% if request.get_full_path == "/" %}is-primary full{% else %}is-large{% endif%}">
|
<section class="hero {% if request.get_full_path == "/" %}is-primary full{% else %}is-large{% endif%}">
|
||||||
<div class="hero-head movie-head">
|
{% include 'info-head.html' with movie=movie %}
|
||||||
<p class="title">{{ movie.name }}</p>
|
{% include 'info-body.html' with movie=movie %}
|
||||||
{% if request.get_full_path != "/" %}
|
{% include 'info-foot.html' with movie=movie %}
|
||||||
<p class="stats">
|
|
||||||
<span class="stars">{{ movie.stars_icons }}</span>
|
|
||||||
<span><i class="gg-time"></i>{{ movie.duration_formatted }}</span>
|
|
||||||
<span><i class="gg-software-download"></i>{{ movie.count_formatted }}</span>
|
|
||||||
</p>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
<div class="hero-body movie-body">
|
|
||||||
{% if request.get_full_path == "/" %}
|
|
||||||
<div class="stats">
|
|
||||||
<p class="stars">{{ movie.stars_icons }}</p>
|
|
||||||
<p><i class="gg-time"></i>{{ movie.duration_formatted }}</p>
|
|
||||||
<p><i class="gg-software-download"></i>{{ movie.count_formatted }}</p>
|
|
||||||
</div>
|
|
||||||
{% else %}
|
|
||||||
<div class="about">
|
|
||||||
<div class="columns is-desktop">
|
|
||||||
<div class="column">
|
|
||||||
<h2 class="subtitle">Cartel</h2>
|
|
||||||
<figure>
|
|
||||||
<img src="{{ movie.cartel }}">
|
|
||||||
</figure>
|
|
||||||
</div>
|
|
||||||
<div class="column">
|
|
||||||
<h2 class="subtitle">Ficha técnica</h2>
|
|
||||||
<table class="table is-fullwidth infobox">
|
|
||||||
<tbody>
|
|
||||||
<tr>
|
|
||||||
<td>Título original</td>
|
|
||||||
<td>{{ movie.original_name }}<td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Año</td>
|
|
||||||
<td>{{ movie.year }}<td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>País</td>
|
|
||||||
<td>{{ movie.countries }}<td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Duración</td>
|
|
||||||
<td>{{ movie.duration }} min<td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Dirección</td>
|
|
||||||
<td>{{ movie.directors }}<td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Reparto</td>
|
|
||||||
<td>{{ movie.actors }}<td>
|
|
||||||
</tr>
|
|
||||||
<tr>
|
|
||||||
<td>Género</td>
|
|
||||||
<td>{{ movie.genders }}<td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
{% if movie.wiki.summary %}
|
|
||||||
<h2 class="subtitle">Sinopsis de <a href="{{ movie.wiki.url }}" target="_blank">Wikipedia</a></h2>
|
|
||||||
{{ movie.wiki.summary | safe }}
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
{% if user.is_superuser %}
|
|
||||||
<video controls>
|
|
||||||
<source src="{{ movie.file_name }}" type="video/mp4">
|
|
||||||
</video>
|
|
||||||
{% endif %}
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
<div class="hero-foot">
|
|
||||||
<nav class="tabs is-boxed is-fullwidth">
|
|
||||||
<div class="container">
|
|
||||||
<ul>
|
|
||||||
<li><a href="{{ movie.file_name }}" target="_blank" download>Descargar</a></li>
|
|
||||||
{% if request.get_full_path == "/" %}
|
|
||||||
<li><a href="/movie/{{ movie.id }}">Detalles</a></li>
|
|
||||||
{% endif %}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
</section>
|
</section>
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
{% for section, content in sections.items %}
|
||||||
|
{% include 'section.html' with section=section content=content %}
|
||||||
|
{% endfor %}
|
||||||
|
{% endblock %}
|
|
@ -12,24 +12,25 @@
|
||||||
</div>
|
</div>
|
||||||
<div id="menu" class="navbar-menu force-display">
|
<div id="menu" class="navbar-menu force-display">
|
||||||
<div class="navbar-start">
|
<div class="navbar-start">
|
||||||
{% if request.get_full_path == "/" %}
|
{% if request.get_full_path != "/" %}
|
||||||
<a class="navbar-item" href="{% url 'search' %}">Buscar</a>
|
|
||||||
{% else %}
|
|
||||||
<a class="navbar-item" href="{% url 'home' %}">Inicio</a>
|
<a class="navbar-item" href="{% url 'home' %}">Inicio</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% if request.get_full_path != "/search/" %}
|
||||||
|
<a class="navbar-item" href="{% url 'search' %}">Buscar</a>
|
||||||
|
{% endif %}
|
||||||
<div class="navbar-item has-dropdown is-hoverable">
|
<div class="navbar-item has-dropdown is-hoverable">
|
||||||
<a class="navbar-link">Más</a>
|
<a class="navbar-link">Más</a>
|
||||||
<div class="navbar-dropdown">
|
<div class="navbar-dropdown">
|
||||||
<a class="navbar-item">Acerca</a>
|
<a class="navbar-item" href="{% url 'about' %}" >Acerca</a>
|
||||||
<hr class="navbar-divider">
|
<hr class="navbar-divider">
|
||||||
<a class="navbar-item">Reporta un problema</a>
|
<a class="navbar-item" href="{% url 'bugs' %}">Reporta un problema</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="navbar-end">
|
<div class="navbar-end">
|
||||||
<div class="navbar-item">
|
<div class="navbar-item">
|
||||||
<div class="buttons">
|
<div class="buttons">
|
||||||
<a class="button is-primary">Ingresa</a>
|
<a class="button is-primary" href="{% url 'admin:index' %}">Ingresa</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
<section class="hero">
|
<section class="hero">
|
||||||
<div class="hero-body hero-cartels">
|
<div class="hero-body hero-cartels">
|
||||||
<p class="title"><a href="movies/{{ section }}">{{ section }}<span class="arrows"/></a></p>
|
{% if request.get_full_path == "/" %}
|
||||||
|
<p class="title"><a href="movies/{{ section }}">{{ section }}<span class="arrows"/></a></p>
|
||||||
|
{% else %}
|
||||||
|
<p class="title">{{ section }}</p>
|
||||||
|
{% endif %}
|
||||||
<div class="cartels">
|
<div class="cartels">
|
||||||
{% for movie in content %}
|
{% for movie in content %}
|
||||||
<div class="cartel">
|
<div class="cartel">
|
||||||
|
|
Loading…
Reference in New Issue