list_display = ('__unicode__',)
filter_horizontal = ['audios']
-class PageCategoryAdmin(admin.ModelAdmin):
-
- model = PageCategory
- list_display = ('__unicode__',)
-
-
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)
+++ /dev/null
-# -*- 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'),
- ),
- ]
--- /dev/null
+# -*- 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'),
+ ),
+ ]
--- /dev/null
+# -*- 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',
+ ),
+ ]
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
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"""
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()
{% 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 %}
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"),
]
def get_context_data(self, **kwargs):
context = super(VideoListView, self).get_context_data(**kwargs)
+ context['categories'] = VideoCategory.objects.all()
return context
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
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"
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
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 ""
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 ""