]> git.parisson.com Git - mezzo.git/commitdiff
Task #125 #126: adding topics list on home and create page detail
authorEmilie <zawadzki@ircam.fr>
Fri, 29 Jul 2016 12:05:41 +0000 (14:05 +0200)
committerEmilie <zawadzki@ircam.fr>
Fri, 29 Jul 2016 12:05:41 +0000 (14:05 +0200)
21 files changed:
app/organization/core/urls.py
app/organization/core/views.py
app/organization/featured/templatetags/featured_tags.py
app/organization/featured/urls.py
app/organization/featured/views.py
app/organization/magazine/migrations/0001_initial.py [changed mode: 0644->0755]
app/organization/magazine/migrations/0002_delete_category.py [changed mode: 0644->0755]
app/organization/magazine/migrations/0003_auto_20160728_1536.py [changed mode: 0644->0755]
app/organization/magazine/migrations/0004_article_related_article.py [changed mode: 0644->0755]
app/organization/magazine/migrations/0005_auto_20160728_1551.py [changed mode: 0644->0755]
app/organization/magazine/migrations/0006_auto_20160728_1632.py [changed mode: 0644->0755]
app/organization/magazine/migrations/0007_topic_articles.py [new file with mode: 0755]
app/organization/magazine/migrations/0008_auto_20160729_1233.py [new file with mode: 0644]
app/organization/magazine/migrations/__init__.py [changed mode: 0644->0755]
app/organization/magazine/models.py
app/organization/magazine/urls.py
app/organization/magazine/views.py
app/organization/urls.py
app/templates/index.html
app/templates/magazine/topic/inc_list_topic.html [new file with mode: 0644]
app/templates/magazine/topic/topic_detail.html [new file with mode: 0644]

index 68af3c40f34a3000cd782009775a3db6f5b8f355..db08f17a41b34c1867bd2dfc2930591d6e05967d 100644 (file)
@@ -7,9 +7,5 @@ from django.conf.urls.i18n import i18n_patterns
 from mezzanine.core.views import direct_to_template
 from mezzanine.conf import settings
 
-from organization.core.views import HomeView
-
-
 urlpatterns = [
-    url("^$", HomeView.as_view(), name="home"),
 ]
index 82dc1b0c07c12e4fa0db1c8f0d6b923c6f8a24e0..a0d7ec1946948f25066f021d7e232608b2af1520 100644 (file)
@@ -3,18 +3,8 @@ from django.http import Http404
 from django.views.generic.base import View
 from django.views.generic import DetailView, ListView, TemplateView
 
-
 class SlugMixin(object):
 
     def get_object(self):
         objects = self.model.objects.all()
         return get_object_or_404(objects, slug=self.kwargs['slug'])
-
-
-class HomeView(TemplateView):
-
-    template_name = 'index.html'
-
-    def get_context_data(self, **kwargs):
-        context = super(HomeView, self).get_context_data(**kwargs)
-        return context
index 2053a6d3fbabcb29e9a760ed4622bc547b0740a2..63fd889e278a607841a47bc1a3fbbdd70051391e 100644 (file)
@@ -45,8 +45,6 @@ def featured(*args):
             featured_list.append(brief)
         for video in featured.videos.all():
             featured_list.append(video)
-        # for artist in featured.artists.all():
-        #     featured_list.append(artist)
         for playlist in featured.playlists.all():
             featured_list.append(playlist)
         shuffle(featured_list)
index cea975aeae69e65a4209ae4445dea0d2a8be0f9b..b321eb24e8980fa035694529bedc34f8142e9a17 100644 (file)
@@ -6,8 +6,8 @@ from django.conf.urls.i18n import i18n_patterns
 
 from mezzanine.core.views import direct_to_template
 from mezzanine.conf import settings
-
+from organization.featured.views import HomeView
 
 urlpatterns = [
-
+    url("^$", HomeView.as_view(), name="home"),
 ]
index 2536b376efd02b2fa61e25f2dfa2552042caf0b8..75e1f2dbdd11037a2f4be284d5c7a4eaffadfa30 100644 (file)
@@ -1 +1,13 @@
 from django.shortcuts import render
+from django.views.generic import DetailView, ListView, TemplateView
+from organization.magazine.models import Topic
+from organization.core.views import SlugMixin
+
+class HomeView(SlugMixin, TemplateView):
+
+    template_name = 'index.html'
+    topics = Topic.objects.all()
+    def get_context_data(self, **kwargs):
+        context = super(HomeView, self).get_context_data(**kwargs)
+        context['topics'] = self.topics
+        return context
diff --git a/app/organization/magazine/migrations/0007_topic_articles.py b/app/organization/magazine/migrations/0007_topic_articles.py
new file mode 100755 (executable)
index 0000000..38e0571
--- /dev/null
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-07-28 15:13
+from __future__ import unicode_literals
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('organization-magazine', '0006_auto_20160728_1632'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='topic',
+            name='articles',
+            field=models.ManyToManyField(blank=True, to='organization-magazine.Article', verbose_name='articles'),
+        ),
+    ]
diff --git a/app/organization/magazine/migrations/0008_auto_20160729_1233.py b/app/organization/magazine/migrations/0008_auto_20160729_1233.py
new file mode 100644 (file)
index 0000000..b4ca356
--- /dev/null
@@ -0,0 +1,93 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.9.7 on 2016-07-29 10:33
+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'),
+        ('organization-magazine', '0007_topic_articles'),
+    ]
+
+    operations = [
+        migrations.RemoveField(
+            model_name='topic',
+            name='name',
+        ),
+        migrations.AddField(
+            model_name='topic',
+            name='_meta_title',
+            field=models.CharField(blank=True, help_text='Optional title to be used in the HTML title tag. If left blank, the main title field will be used.', max_length=500, null=True, verbose_name='Title'),
+        ),
+        migrations.AddField(
+            model_name='topic',
+            name='created',
+            field=models.DateTimeField(editable=False, null=True),
+        ),
+        migrations.AddField(
+            model_name='topic',
+            name='expiry_date',
+            field=models.DateTimeField(blank=True, help_text="With Published chosen, won't be shown after this time", null=True, verbose_name='Expires on'),
+        ),
+        migrations.AddField(
+            model_name='topic',
+            name='gen_description',
+            field=models.BooleanField(default=True, help_text='If checked, the description will be automatically generated from content. Uncheck if you want to manually set a custom description.', verbose_name='Generate description'),
+        ),
+        migrations.AddField(
+            model_name='topic',
+            name='in_sitemap',
+            field=models.BooleanField(default=True, verbose_name='Show in sitemap'),
+        ),
+        migrations.AddField(
+            model_name='topic',
+            name='keywords_string',
+            field=models.CharField(blank=True, editable=False, max_length=500),
+        ),
+        migrations.AddField(
+            model_name='topic',
+            name='publish_date',
+            field=models.DateTimeField(blank=True, db_index=True, help_text="With Published chosen, won't be shown until this time", null=True, verbose_name='Published from'),
+        ),
+        migrations.AddField(
+            model_name='topic',
+            name='short_url',
+            field=models.URLField(blank=True, null=True),
+        ),
+        migrations.AddField(
+            model_name='topic',
+            name='site',
+            field=models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.Site'),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='topic',
+            name='slug',
+            field=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'),
+        ),
+        migrations.AddField(
+            model_name='topic',
+            name='status',
+            field=models.IntegerField(choices=[(1, 'Draft'), (2, 'Published')], default=2, help_text='With Draft chosen, will only be shown for admin users on the site.', verbose_name='Status'),
+        ),
+        migrations.AddField(
+            model_name='topic',
+            name='title',
+            field=models.CharField(default='title default', max_length=500, verbose_name='Title'),
+            preserve_default=False,
+        ),
+        migrations.AddField(
+            model_name='topic',
+            name='updated',
+            field=models.DateTimeField(editable=False, null=True),
+        ),
+        migrations.AlterField(
+            model_name='topic',
+            name='description',
+            field=models.TextField(blank=True, verbose_name='Description'),
+        ),
+    ]
index 64ea040b3fa497ff7b3dfa60abad5664cbc445bb..e2d2ce1acbf0a94544dd10eee4059a6e5caf7440 100644 (file)
@@ -13,7 +13,7 @@ class Article(BlogPost, Photo):
     sub_title = models.CharField(_('sub title'), blank=True, max_length=1000)
     related_articles = models.ManyToManyField("self",
                                  verbose_name=_("Related articles"), blank=True)
-    model_name = _('article')                                
+    model_name = _('article')
     def get_absolute_url(self):
         return reverse("magazine-article-detail", kwargs={"slug": self.slug})
 
@@ -33,8 +33,10 @@ class Brief(Displayable, RichText):
         verbose_name = _('brief')
 
 
-class Topic(Named, Description):
+class Topic(Displayable):
     """Topic for magazine menu"""
 
+    articles = models.ManyToManyField(Article, verbose_name=_('articles'), blank=True)
+
     class Meta:
         verbose_name = _('topic')
index e71363704e35e46a1e7a716bb9512456139c0027..951be16a825bcf9ad0915bf39ddbc37efd8ed6ec 100644 (file)
@@ -14,4 +14,5 @@ _slash = "/" if settings.APPEND_SLASH else ""
 urlpatterns = [
     url("^article/$", ArticleListView.as_view(), name="magazine-article-list"),
     url("^article/detail/(?P<slug>.*)%s$" % _slash, ArticleDetailView.as_view(), name="magazine-article-detail"),
+    url("^topic/detail/(?P<slug>.*)%s$" % _slash, TopicDetailView.as_view(), name='topic-detail'),
 ]
index 0ad63f47960d3b22f375dcf01c998192548ace9a..50f7cc735581bb191795a4e1ba3163d203066c12 100644 (file)
@@ -5,8 +5,9 @@ from django.views.generic import DetailView, ListView, TemplateView
 from django.views.generic.base import *
 from django.shortcuts import get_object_or_404
 
-from organization.magazine.models import Article, Brief
+from organization.magazine.models import Article, Brief, Topic
 from organization.core.views import SlugMixin
+from django.template.defaultfilters import slugify
 
 
 class ArticleDetailView(SlugMixin, DetailView):
@@ -40,3 +41,14 @@ class BriefDetailView(SlugMixin, DetailView):
     def get_context_data(self, **kwargs):
         context = super(BriefDetailView, self).get_context_data(**kwargs)
         return context
+
+
+class TopicDetailView(SlugMixin, DetailView):
+
+    model = Topic
+    template_name='magazine/topic/topic_detail.html'
+    context_object_name = 'topic'
+
+    def get_context_data(self, **kwargs):
+        context = super(TopicDetailView, self).get_context_data(**kwargs)
+        return context
index 5f4d6c420b1082d6f1b10620f35f0706a1e239f6..b8cfecb2474b18a03fbf8631afd8410ab7cc8d98 100644 (file)
@@ -13,6 +13,7 @@ from mezzanine.conf import settings
 
 urlpatterns = [
     url("^", include('organization.core.urls')),
+    url("^", include('organization.featured.urls')),
     url("^", include('organization.festival.urls')),
     url("^", include('organization.magazine.urls')),
     url("^", include('organization.media.urls')),
index d4fd33724507c7361770fd939511d527ad93ce05..ba59b595decd3d82a1883bf739d47c94c9240711 100644 (file)
 
 {% block main %}
 
+<ul>
+  <li><a href="#" title="{% trans "News Headlines" %}">{% trans "News Headlines" %}</a></li>
+  <li><a href="#" title="{% trans "Magazine" %}">{% trans "Magazine" %}</a></li>
+  <li><a href="#" title="{% trans "Brief" %}">{% trans "Brief" %}</a></li>
+  <li><a href="#" title="{% trans "Media" %}">{% trans "Media" %}</a></li>
+</ul>
+{% if topics %}
+<div>
+  {% for topic in topics %}
+  {% include "magazine/topic/inc_list_topic.html" %}
+  {% endfor %}
+</div>
+{% endif %}
+
 <div class="last__media">
-    <h2 class="section__title">{% trans "Featured" %}</h2>
     <div class="msry__container">
         <div class="msry__sizer"></div>
+        {% featured as featured_list %}
         {% for item in featured_list %}
         <div class="last__media__entry  msry__item">
             {% if item|get_class == 'Brief' %}
@@ -23,7 +37,7 @@
                 {% endwith %}
             {% elif item|get_class == 'Article' %}
                 {% with item as article %}
-                    {% include "magazine/article/includes/post_card.html" %}
+                    {% include "magazine/article/includes/article_card.html" %}
                 {% endwith %}
             {% elif item|get_class == 'Video' %}
                 {% with item as video %}
diff --git a/app/templates/magazine/topic/inc_list_topic.html b/app/templates/magazine/topic/inc_list_topic.html
new file mode 100644 (file)
index 0000000..fa3ab68
--- /dev/null
@@ -0,0 +1,7 @@
+{% load i18n pages_tags mezzanine_tags %}
+<div>
+    <a href="{% url "topic-detail" topic.slug %}" title="{{ topic.name }}" >
+      <h3>{{ topic.title }}</h3>
+      <p>{{ topic.description|slice:":255" }}</p>
+    </a>
+</div>
diff --git a/app/templates/magazine/topic/topic_detail.html b/app/templates/magazine/topic/topic_detail.html
new file mode 100644 (file)
index 0000000..9e54e09
--- /dev/null
@@ -0,0 +1,64 @@
+{% extends "base.html" %}
+{% load i18n mezzanine_tags blog_tags keyword_tags disqus_tags %}
+
+{% block meta_title %}{% if page %}{{ page.meta_title }}{% else %}{% trans "Articles" %}{% endif %}{% endblock %}
+
+{% block meta_keywords %}{% metablock %}
+{% keywords_for page as keywords %}
+{% for keyword in keywords %}
+    {% if not forloop.first %}, {% endif %}
+    {{ keyword }}
+{% endfor %}
+{% endmetablock %}{% endblock %}
+
+{% block meta_description %}{% metablock %}
+{{ page.description }}
+{% endmetablock %}{% endblock %}
+
+{% block title %}
+{% if page %}
+{% editable page.title %}{{ page.title }}{% endeditable %}
+{% else %}
+{% trans "Articles" %}
+{% endif %}
+{% endblock %}
+
+{% block breadcrumb_menu %}
+{{ block.super }}
+{% if tag or category or year or month or author %}
+<li>{% spaceless %}
+{% if tag %}
+    {% trans "Tag:" %} {{ tag }}
+{% else %}{% if category %}
+    {% trans "Category:" %} {{ category }}
+{% else %}{% if year or month %}
+    {% if month %}{{ month }}, {% endif %}{{ year }}
+{% else %}{% if author %}
+    {% trans "Author:" %} {{ author.get_full_name|default:author.username }}
+{% endif %}{% endif %}{% endif %}{% endif %}
+{% endspaceless %}
+</li>
+{% endif %}
+{% endblock %}
+
+{% block main %}
+<div class="msry__container">
+  <div class="msry__sizer"></div>
+
+  <h1>{{ topic.title }}</h1>
+  <p>{{ topic.description }}</p>
+
+  {% for article in topic.articles.all %}
+     {% include 'magazine/article/includes/article_card.html' %}
+  {% endfor %}
+</div>
+
+{% if settings.COMMENTS_DISQUS_SHORTNAME %}
+{% include "generic/includes/disqus_counts.html" %}
+{% endif %}
+
+{% endblock %}
+
+{% block right_panel %}
+{% include "blog/includes/filter_panel.html" %}
+{% endblock %}