From e2a34f619305ac6720c80d52b822cd01a898ac22 Mon Sep 17 00:00:00 2001 From: Emilie Date: Wed, 8 Feb 2017 15:54:38 +0100 Subject: [PATCH] =?utf8?q?[Actualit=C3=A9]=20:=20create=20view=20mixing=20?= =?utf8?q?Articles=20and=20Medias?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../core/templatetags/organization_tags.py | 12 +++++++++- app/organization/magazine/urls.py | 1 + app/organization/magazine/views.py | 24 +++++++++++++++++++ .../magazine/article/article_list.html | 17 +++++++++++++ .../media/media/includes/media_card.html | 19 +++++++++++++++ 5 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 app/templates/magazine/article/article_list.html create mode 100644 app/templates/media/media/includes/media_card.html diff --git a/app/organization/core/templatetags/organization_tags.py b/app/organization/core/templatetags/organization_tags.py index 155f743f..329e008e 100644 --- a/app/organization/core/templatetags/organization_tags.py +++ b/app/organization/core/templatetags/organization_tags.py @@ -22,6 +22,7 @@ # -*- coding: utf-8 -*- import datetime import calendar +from re import match from django.http import QueryDict from mezzanine.pages.models import Page from mezzanine.blog.models import BlogPost @@ -29,7 +30,6 @@ from mezzanine.template import Library from mezzanine_agenda.models import Event from mezzanine.conf import settings from random import shuffle - from organization.magazine.models import * from organization.projects.models import * @@ -216,3 +216,13 @@ def format_wp(work_packages): @register.filter def format_percent(percent): return str(percent * 100) + ' %' + +@register.filter +def get_media_type(media): + mime_type = media.transcoded.first().mime_type + media_type = "" + if match('video', mime_type): + media_type = "Video" + elif match('audio', mime_type): + media_type = "Audio" + return media_type diff --git a/app/organization/magazine/urls.py b/app/organization/magazine/urls.py index 76ace67c..78074935 100644 --- a/app/organization/magazine/urls.py +++ b/app/organization/magazine/urls.py @@ -34,6 +34,7 @@ _slash = "/" if settings.APPEND_SLASH else "" urlpatterns = [ url("^article/detail/(?P.*)%s$" % _slash, ArticleDetailView.as_view(), name="magazine-article-detail"), + url("^article/list%s$" % _slash, ArticleListView.as_view(), name="magazine-article-list"), url("^topic/detail/(?P.*)%s$" % _slash, TopicDetailView.as_view(), name='topic-detail'), url("^object-autocomplete/$", ObjectAutocomplete.as_view(), name='object-autocomplete'), url("^dynamic-content-article/$", DynamicContentArticleView.as_view(), name='dynamic-content-article'), diff --git a/app/organization/magazine/views.py b/app/organization/magazine/views.py index 75c710c9..4c680d0a 100644 --- a/app/organization/magazine/views.py +++ b/app/organization/magazine/views.py @@ -38,6 +38,7 @@ from organization.network.models import DepartmentPage from organization.pages.models import CustomPage, DynamicContentPage from organization.core.views import SlugMixin, autocomplete_result_formatting from django.template.defaultfilters import slugify +from itertools import chain class ArticleDetailView(SlugMixin, DetailView): @@ -177,3 +178,26 @@ class DynamicContentArticleView(Select2QuerySetSequenceView): def get_results(self, context): results = autocomplete_result_formatting(self, context) return results + + +class ArticleListView(SlugMixin, ListView): + + model = Article + template_name='magazine/article/article_list.html' + context_object_name = 'objects' + + def get_queryset(self): + qs = super(ArticleListView, self).get_queryset() + qs = qs.filter(status=2) + medias = Media.objects.published() + + qs = sorted( + chain(qs, medias), + key=lambda instance: instance.created, + reverse=True) + + return qs + + def get_context_data(self, **kwargs): + context = super(ArticleListView, self).get_context_data(**kwargs) + return context diff --git a/app/templates/magazine/article/article_list.html b/app/templates/magazine/article/article_list.html new file mode 100644 index 00000000..18e2d3ac --- /dev/null +++ b/app/templates/magazine/article/article_list.html @@ -0,0 +1,17 @@ +{% extends "base.html" %} +{% load mezzanine_tags organization_tags %} + +{% block main %} + +{% for object in objects %} +
+ {% with app_label=object|app_label_short classname=object|classname|lower %} + {% with app_label|add:"/"|add:classname|add:"/includes/"|add:classname|add:"_card.html" as template %} + {% include template %} + {% endwith %} + {% endwith %} +
+{% endfor %} +{% pagination_for objects %} + +{% endblock %} diff --git a/app/templates/media/media/includes/media_card.html b/app/templates/media/media/includes/media_card.html new file mode 100644 index 00000000..e620514b --- /dev/null +++ b/app/templates/media/media/includes/media_card.html @@ -0,0 +1,19 @@ +{% load mezzanine_tags keyword_tags i18n organization_tags staticfiles %} + +
+ +
+ {% if object.poster_url %} + + {% else %} + + {% endif %} +
+ + {{ object|get_media_type }} +

{{ object.title }}

+
+ {{ object.description|richtext_filters|safe|truncatechars_html:200 }} +
+
+
-- 2.39.5