]> git.parisson.com Git - mezzo.git/commitdiff
add video category list
authorGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Thu, 21 Apr 2016 09:42:03 +0000 (11:42 +0200)
committerGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Thu, 21 Apr 2016 09:42:03 +0000 (11:42 +0200)
app/festival/admin.py
app/festival/migrations/0020_auto_20160421_1034.py [deleted file]
app/festival/migrations/0020_auto_20160421_1059.py [new file with mode: 0644]
app/festival/migrations/0021_delete_pagecategory.py [new file with mode: 0644]
app/festival/models.py
app/festival/templates/festival/video_list.html
app/festival/urls.py
app/festival/views.py
app/locale/fr/LC_MESSAGES/django.mo
app/locale/fr/LC_MESSAGES/django.po

index 45593b33907834ccd8a0448b3744f1467da60e92..b8b7cd5c2e12cdfa1a44466bc8b7f2700e37a6e7 100644 (file)
@@ -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_1034.py
deleted file mode 100644 (file)
index 6e46ffd..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-# -*- coding: utf-8 -*-
-# Generated by Django 1.9.2 on 2016-04-21 08:34
-from __future__ import unicode_literals
-
-from django.db import migrations, models
-import django.db.models.deletion
-
-
-class Migration(migrations.Migration):
-
-    dependencies = [
-        ('festival', '0019_auto_20160410_2148'),
-    ]
-
-    operations = [
-        migrations.CreateModel(
-            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')),
-            ],
-            options={
-                'verbose_name': 'video category',
-                'db_table': 'festival_video_category',
-            },
-        ),
-        migrations.AddField(
-            model_name='video',
-            name='category',
-            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='videos', to='festival.VideoCategory', verbose_name='category'),
-        ),
-    ]
diff --git a/app/festival/migrations/0020_auto_20160421_1059.py b/app/festival/migrations/0020_auto_20160421_1059.py
new file mode 100644 (file)
index 0000000..176f87d
--- /dev/null
@@ -0,0 +1,35 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.2 on 2016-04-21 08:59
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('sites', '0002_alter_domain_unique'),
+        ('festival', '0019_auto_20160410_2148'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='VideoCategory',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('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',
+                'db_table': 'festival_video_category',
+            },
+        ),
+        migrations.AddField(
+            model_name='video',
+            name='category',
+            field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='videos', to='festival.VideoCategory', verbose_name='category'),
+        ),
+    ]
diff --git a/app/festival/migrations/0021_delete_pagecategory.py b/app/festival/migrations/0021_delete_pagecategory.py
new file mode 100644 (file)
index 0000000..3cc9174
--- /dev/null
@@ -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',
+        ),
+    ]
index e0b42f97cbb120e6a53f08cb803429fc8dfc6275..fbc28aac44cc863fe92eb3aaa16100f45ce87e4a 100644 (file)
@@ -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()
index a738d2d143b5d7475f1b4443bc7a690db2794765..e971c2cab7dc70814d5ed6fe0bb13cbb78849af2 100644 (file)
@@ -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 %}
+<p>{% trans "Categories" %} :
+{% for category in categories %}
+<a href="{% url "festival-video-list-category" category.slug %}">{{ category }}</a> ({{ category.count }}){% if not forloop.last and categories|length > 1 %} | {% endif %}
+{% endfor %}
+</p>
+{% elif category %}
+<p>{% trans "Videos for the category" %} : {{ category }}</p>
+{% endif %}
+
 <div class="video__list  msry__container">
     <div class="msry__sizer"></div>
     {% for video in object_list %}
index 686b4770b5572fd9c96ee31596807eb79706f6ff..a02323cbb925aa456d6881854131ea671e0b1032 100644 (file)
@@ -11,7 +11,8 @@ from festival.views import *
 
 urlpatterns = [
     url(r'^artists/$', ArtistListView.as_view(), name="festival-artist-list"),
-    url(r'^artists/(?P<slug>.*)/$', ArtistDetailView.as_view(), name="festival-artist-detail"),
+    url(r'^artists/detail/(?P<slug>.*)/$', ArtistDetailView.as_view(), name="festival-artist-detail"),
     url(r'^videos/$', VideoListView.as_view(), name="festival-video-list"),
-    url(r'^videos/(?P<slug>.*)/$', VideoDetailView.as_view(), name="festival-video-detail"),
+    url(r'^videos/detail/(?P<slug>.*)/$', VideoDetailView.as_view(), name="festival-video-detail"),
+    url(r'^videos/category/(?P<slug>.*)/$', VideoListCategoryView.as_view(), name="festival-video-list-category"),
 ]
index cb49419151418957e960f8dc829af35ec01e9198..90b9458994d2c814f499ff31832d12bb11e3535d 100644 (file)
@@ -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
index d4e8d0a15e9ed9106f509a45281aca3000e7356f..9a60f99d0fc00d382f97eb89204a167e75a4c3a1 100644 (file)
Binary files a/app/locale/fr/LC_MESSAGES/django.mo and b/app/locale/fr/LC_MESSAGES/django.mo differ
index 3cf9a47c9c36dddad10e890f0cf88f3d87a1310a..c27d13f757b4f2b3011e714de70c4ac2f3ee1b7a 100644 (file)
@@ -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 <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\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 ""