From d75a810cba528c36fe90ba6e408207914499a1b0 Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Thu, 21 Apr 2016 11:42:03 +0200 Subject: [PATCH] add video category list --- app/festival/admin.py | 8 +- ...421_1034.py => 0020_auto_20160421_1059.py} | 8 +- .../migrations/0021_delete_pagecategory.py | 18 ++++ app/festival/models.py | 19 +--- .../templates/festival/video_list.html | 13 ++- app/festival/urls.py | 5 +- app/festival/views.py | 13 +++ app/locale/fr/LC_MESSAGES/django.mo | Bin 3116 -> 3227 bytes app/locale/fr/LC_MESSAGES/django.po | 81 ++++++++++-------- 9 files changed, 103 insertions(+), 62 deletions(-) rename app/festival/migrations/{0020_auto_20160421_1034.py => 0020_auto_20160421_1059.py} (66%) create mode 100644 app/festival/migrations/0021_delete_pagecategory.py diff --git a/app/festival/admin.py b/app/festival/admin.py index 45593b33..b8b7cd5c 100644 --- a/app/festival/admin.py +++ b/app/festival/admin.py @@ -50,12 +50,6 @@ class PlaylistAdmin(admin.ModelAdmin): list_display = ('__unicode__',) filter_horizontal = ['audios'] -class PageCategoryAdmin(admin.ModelAdmin): - - model = PageCategory - list_display = ('__unicode__',) - - class FeaturedAdmin(admin.ModelAdmin): @@ -64,9 +58,9 @@ class FeaturedAdmin(admin.ModelAdmin): filter_horizontal = ['artists', 'events', 'videos', 'pages', 'blogposts', 'pages', 'playlists'] -admin.site.register(PageCategory, PageCategoryAdmin) admin.site.register(Artist, ArtistAdminDisplayable) admin.site.register(Video, VideoAdminDisplayable) admin.site.register(Audio, AudioAdminDisplayable) admin.site.register(Playlist, PlaylistAdmin) admin.site.register(Featured, FeaturedAdmin) +admin.site.register(VideoCategory) diff --git a/app/festival/migrations/0020_auto_20160421_1034.py b/app/festival/migrations/0020_auto_20160421_1059.py similarity index 66% rename from app/festival/migrations/0020_auto_20160421_1034.py rename to app/festival/migrations/0020_auto_20160421_1059.py index 6e46ffdd..176f87d8 100644 --- a/app/festival/migrations/0020_auto_20160421_1034.py +++ b/app/festival/migrations/0020_auto_20160421_1059.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# Generated by Django 1.9.2 on 2016-04-21 08:34 +# Generated by Django 1.9.2 on 2016-04-21 08:59 from __future__ import unicode_literals from django.db import migrations, models @@ -9,6 +9,7 @@ import django.db.models.deletion class Migration(migrations.Migration): dependencies = [ + ('sites', '0002_alter_domain_unique'), ('festival', '0019_auto_20160410_2148'), ] @@ -17,8 +18,9 @@ class Migration(migrations.Migration): name='VideoCategory', fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('name', models.CharField(max_length=512, verbose_name='name')), - ('description', models.TextField(blank=True, verbose_name='description')), + ('title', models.CharField(max_length=500, verbose_name='Title')), + ('slug', models.CharField(blank=True, help_text='Leave blank to have the URL auto-generated from the title.', max_length=2000, null=True, verbose_name='URL')), + ('site', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site')), ], options={ 'verbose_name': 'video category', diff --git a/app/festival/migrations/0021_delete_pagecategory.py b/app/festival/migrations/0021_delete_pagecategory.py new file mode 100644 index 00000000..3cc91743 --- /dev/null +++ b/app/festival/migrations/0021_delete_pagecategory.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.9.2 on 2016-04-21 09:23 +from __future__ import unicode_literals + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('festival', '0020_auto_20160421_1059'), + ] + + operations = [ + migrations.DeleteModel( + name='PageCategory', + ), + ] diff --git a/app/festival/models.py b/app/festival/models.py index e0b42f97..fbc28aac 100644 --- a/app/festival/models.py +++ b/app/festival/models.py @@ -3,7 +3,7 @@ from django.utils.translation import ugettext_lazy as _ from django.core.urlresolvers import reverse, reverse_lazy from django.conf import settings -from mezzanine.core.models import RichText, Displayable +from mezzanine.core.models import RichText, Displayable, Slugged from mezzanine.core.fields import RichTextField, OrderField, FileField from mezzanine.utils.models import AdminThumbMixin, upload_to from mezzanine.blog.models import BlogPost @@ -53,17 +53,6 @@ class BaseTitleModel(models.Model): return self.title -class PageCategory(BaseNameModel): - """Page Category""" - - class Meta(MetaCore): - verbose_name = _('page category') - db_table = app_label + '_page_category' - - def __unicode__(self): - return self.name - - class Artist(Displayable, RichText, AdminThumbMixin): """Artist""" @@ -220,12 +209,12 @@ class Featured(BaseNameModel): return self.name -class VideoCategory(BaseNameModel): +class VideoCategory(Slugged): """Video Category""" class Meta(MetaCore): verbose_name = _('video category') db_table = app_label + '_video_category' - def __str__(self): - return self.name + def count(self): + return self.videos.all().count() diff --git a/app/festival/templates/festival/video_list.html b/app/festival/templates/festival/video_list.html index a738d2d1..e971c2ca 100644 --- a/app/festival/templates/festival/video_list.html +++ b/app/festival/templates/festival/video_list.html @@ -1,12 +1,23 @@ {% extends "base.html" %} {% load i18n %} -{% load mezzanine_tags keyword_tags %} +{% load mezzanine_tags keyword_tags festival_tags %} {% block title %} {% trans "Videos" %} {% endblock %} {% block main %} + +{% if categories %} +

{% trans "Categories" %} : +{% for category in categories %} +{{ category }} ({{ category.count }}){% if not forloop.last and categories|length > 1 %} | {% endif %} +{% endfor %} +

+{% elif category %} +

{% trans "Videos for the category" %} : {{ category }}

+{% endif %} +
{% for video in object_list %} diff --git a/app/festival/urls.py b/app/festival/urls.py index 686b4770..a02323cb 100644 --- a/app/festival/urls.py +++ b/app/festival/urls.py @@ -11,7 +11,8 @@ from festival.views import * urlpatterns = [ url(r'^artists/$', ArtistListView.as_view(), name="festival-artist-list"), - url(r'^artists/(?P.*)/$', ArtistDetailView.as_view(), name="festival-artist-detail"), + url(r'^artists/detail/(?P.*)/$', ArtistDetailView.as_view(), name="festival-artist-detail"), url(r'^videos/$', VideoListView.as_view(), name="festival-video-list"), - url(r'^videos/(?P.*)/$', VideoDetailView.as_view(), name="festival-video-detail"), + url(r'^videos/detail/(?P.*)/$', VideoDetailView.as_view(), name="festival-video-detail"), + url(r'^videos/category/(?P.*)/$', VideoListCategoryView.as_view(), name="festival-video-list-category"), ] diff --git a/app/festival/views.py b/app/festival/views.py index cb494191..90b94589 100644 --- a/app/festival/views.py +++ b/app/festival/views.py @@ -42,6 +42,7 @@ class VideoListView(ListView): def get_context_data(self, **kwargs): context = super(VideoListView, self).get_context_data(**kwargs) + context['categories'] = VideoCategory.objects.all() return context @@ -54,3 +55,15 @@ class VideoDetailView(SlugMixin, DetailView): def get_context_data(self, **kwargs): context = super(VideoDetailView, self).get_context_data(**kwargs) return context + + +class VideoListCategoryView(VideoListView): + + def get_queryset(self): + self.category = VideoCategory.objects.get(slug=self.kwargs['slug']) + return self.model.objects.filter(category=self.category) + + def get_context_data(self, **kwargs): + context = super(VideoListView, self).get_context_data(**kwargs) + context['category'] = self.category + return context diff --git a/app/locale/fr/LC_MESSAGES/django.mo b/app/locale/fr/LC_MESSAGES/django.mo index d4e8d0a15e9ed9106f509a45281aca3000e7356f..9a60f99d0fc00d382f97eb89204a167e75a4c3a1 100644 GIT binary patch delta 1411 zcmYM!O-PhM9LMqhwyUdamTqOcn)Q@rR%)%5xss7YP*6x6A_^?oUCfZw>=mqy4u#O| z$y0QRE?XX=y@cgOAy0NJ4`o-ug1RML`u^OBhG(A7%skJ`^PiX9iP+P4b|D%XH&O?A z6Zw00yNS1}w!^^sp0)u?N*ZgOzv{>&&utp8{js z3slFPGw<4`Py&*^FFvh?~Yaij{od&QPeJA&p#i zgPR5(b@j)%k-CqH{1tA&DO`tNaWnqHC{_@SCQ^r*aTD^$+K|gSx#{^ajPQNyrau2i)^vRA9GIGkk=raU3<^bJRE!&Nrx;zD12Yi&xm*kEpyk6Nkb2t<*PHUv%}Ks6duoJ;d@*v~tu+#kpw<>QP(Ugj$)FECn6D zcGO;-Kn-*bHS-jz<1nhjZB)SbPyzYKmfAkDM^>;(>bsw;V3jnslEzTd0d6N}x2xvT zHq`zq@!MQE)%v*7!2;HTnt^@^yU1Fte`yZ|EpsEe!8Piaqtr~+mQ|}lQt+&B)^%WVISxGycItN;5t**|{Dss&H zPoZS6KQodK7o`HhbY{?>EUxi~il_Y};p3%Vs`q-PZ}8e3|3SE?q$S}c5*@9{{9?E} x5E#ifmVOAtZuX~Va)TpYI^zxW>iwA<9r`o=kI1|~Uv{$gf0N!Ryl$?S{RPD6e*^#k delta 1336 zcmYk+T}YEr9LMqh+|SoK|iYpx=*ij9>*OQR7k=#v|B>r;wpp zo1mhBH=NU@8+I3~=%2y$_{h0{8)z?~0$FkWc~qdQ&NZi(C=^JTLi5B>fiz<^@3$T* zTy~5?6Q6MHH0r@ixDBu2M!b&=_yi;P7PWv+sFi*}F8fKL0Dq(Im(kFILP%^D#R}eU z^;FmjYjU=rR?>!g@DM7n!><1%hG<_vO+1WxZrnME3SbH|9Oo@m;A=#u00Rt?5zKPW zYN=?VMv5S|;x6pL;){^WhAFn-I41E9YW#Cl0I!`ZuKzu1hYF|#{6LNOunh_*R>l6) zX9+sA;x62bM^OXLpeD#5mrc6%H0rro+=L6Ld0x8y6;xoK-Tki^qwQsNdT|}rV|$SO zucgvUhX!O&TQla`*Ij!GnZs_o_6%~_LkjKCJZj6IqKeV_-)JJk3uHM#nB)DC3z zQl+jE)`41qqHQK?75`ET6>aw(vc3-`ou^WQtY1rw8ZPPoM89?Yw<+BV!Y}(aPhwHvJU4RL{sN!HZ4Uqd diff --git a/app/locale/fr/LC_MESSAGES/django.po b/app/locale/fr/LC_MESSAGES/django.po index 3cf9a47c..c27d13f7 100644 --- a/app/locale/fr/LC_MESSAGES/django.po +++ b/app/locale/fr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-04-19 18:53+0200\n" +"POT-Creation-Date: 2016-04-21 11:39+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -38,106 +38,113 @@ msgstr "" msgid "title" msgstr "titre" -#: festival/models.py:60 -msgid "page category" -msgstr "catégorie de page" - -#: festival/models.py:70 +#: festival/models.py:59 msgid "first name" msgstr "" -#: festival/models.py:71 +#: festival/models.py:60 msgid "last name" msgstr "" -#: festival/models.py:72 +#: festival/models.py:61 msgid "biography" msgstr "biographie" -#: festival/models.py:73 +#: festival/models.py:62 msgid "photo" msgstr "" -#: festival/models.py:74 +#: festival/models.py:63 msgid "photo credits" msgstr "crédits photo" -#: festival/models.py:75 +#: festival/models.py:64 msgid "photo alignment" msgstr "alignement photo" -#: festival/models.py:76 +#: festival/models.py:65 msgid "photo description" msgstr "" -#: festival/models.py:77 +#: festival/models.py:66 msgid "photo featured" msgstr "" -#: festival/models.py:78 +#: festival/models.py:67 msgid "photo featured credits" msgstr "" -#: festival/models.py:79 festival/models.py:212 +#: festival/models.py:68 festival/models.py:202 msgid "events" msgstr "événements" -#: festival/models.py:84 +#: festival/models.py:73 msgid "artist" msgstr "artiste" -#: festival/models.py:129 +#: festival/models.py:118 msgid "media id" msgstr "" -#: festival/models.py:130 +#: festival/models.py:119 msgid "open source URL" msgstr "" -#: festival/models.py:131 +#: festival/models.py:120 msgid "closed source URL" msgstr "" -#: festival/models.py:132 +#: festival/models.py:121 msgid "poster" msgstr "" -#: festival/models.py:167 festival/models.py:183 festival/models.py:202 +#: festival/models.py:156 festival/models.py:172 festival/models.py:192 msgid "event" msgstr "événement" -#: festival/models.py:170 +#: festival/models.py:159 msgid "audio" msgstr "" -#: festival/models.py:186 +#: festival/models.py:173 +#, fuzzy +#| msgid "Category:" +msgid "category" +msgstr "Catégorie:" + +#: festival/models.py:176 msgid "video" msgstr "" -#: festival/models.py:201 +#: festival/models.py:191 msgid "audios" msgstr "" -#: festival/models.py:211 templates/index.html:42 +#: festival/models.py:201 templates/index.html:42 msgid "artists" msgstr "artistes" -#: festival/models.py:213 templates/index.html:50 +#: festival/models.py:203 templates/index.html:50 msgid "videos" msgstr "vidéos" -#: festival/models.py:214 +#: festival/models.py:204 msgid "blog posts" msgstr "articles" -#: festival/models.py:215 +#: festival/models.py:205 msgid "pages" msgstr "pages" -#: festival/models.py:216 +#: festival/models.py:206 msgid "playlists" msgstr "" +#: festival/models.py:216 +#| msgid "page category" +msgid "video category" +msgstr "catégorie de vidéo" + #: festival/templates/festival/artist_detail.html:27 #: festival/templates/festival/video_detail.html:27 #: templates/agenda/event_detail.html:157 @@ -156,6 +163,17 @@ msgstr "Jouer la vidéo" msgid "Videos" msgstr "Vidéos" +#: festival/templates/festival/video_list.html:12 +#: templates/blog/blog_post_list.html:72 +#: templates/blog/includes/filter_panel.html:43 +msgid "Categories" +msgstr "Catégories" + +#: festival/templates/festival/video_list.html:18 +#| msgid "Viewing posts for the category" +msgid "Videos for the category" +msgstr "Les vidéos de la catégorie" + #: local_settings.py:81 msgid "Content" msgstr "" @@ -403,11 +421,6 @@ msgstr "Les articles postés depuis" msgid "Viewing posts by" msgstr "" -#: templates/blog/blog_post_list.html:72 -#: templates/blog/includes/filter_panel.html:43 -msgid "Categories" -msgstr "" - #: templates/blog/includes/filter_panel.html:6 msgid "Recent Posts" msgstr "" -- 2.39.5