# -*- 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
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 *
@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
urlpatterns = [
url("^article/detail/(?P<slug>.*)%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<slug>.*)%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'),
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):
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
--- /dev/null
+{% extends "base.html" %}
+{% load mezzanine_tags organization_tags %}
+
+{% block main %}
+
+{% for object in objects %}
+ <div class="col-lg-3 col-md-4 col-sm-4 col-xs-6">
+ {% 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 %}
+ </div>
+{% endfor %}
+{% pagination_for objects %}
+
+{% endblock %}
--- /dev/null
+{% load mezzanine_tags keyword_tags i18n organization_tags staticfiles %}
+
+<div class="">
+ <a class="media-box" href="{% url 'organization-media-detail' object.slug %}">
+ <figure class="media-box__image media-box__image--video">
+ {% if object.poster_url %}
+ <img src="{{ object.poster_url }}">
+ {% else %}
+ <img src="{% static "img/placeholder-media.png" %}">
+ {% endif %}
+ </figure>
+
+ {{ object|get_media_type }}
+ <h2 class="media-box__title">{{ object.title }}</h2>
+ <div class="media-box__desc">
+ {{ object.description|richtext_filters|safe|truncatechars_html:200 }}
+ </div>
+ </a>
+</div>