From: Emilie Date: Fri, 29 Jul 2016 12:05:41 +0000 (+0200) Subject: Task #125 #126: adding topics list on home and create page detail X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=a6f7024a18b7ee96ac2764ec0a6ec1b36357ddc7;p=mezzo.git Task #125 #126: adding topics list on home and create page detail --- diff --git a/app/organization/core/urls.py b/app/organization/core/urls.py index 68af3c40..db08f17a 100644 --- a/app/organization/core/urls.py +++ b/app/organization/core/urls.py @@ -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"), ] diff --git a/app/organization/core/views.py b/app/organization/core/views.py index 82dc1b0c..a0d7ec19 100644 --- a/app/organization/core/views.py +++ b/app/organization/core/views.py @@ -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 diff --git a/app/organization/featured/templatetags/featured_tags.py b/app/organization/featured/templatetags/featured_tags.py index 2053a6d3..63fd889e 100644 --- a/app/organization/featured/templatetags/featured_tags.py +++ b/app/organization/featured/templatetags/featured_tags.py @@ -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) diff --git a/app/organization/featured/urls.py b/app/organization/featured/urls.py index cea975ae..b321eb24 100644 --- a/app/organization/featured/urls.py +++ b/app/organization/featured/urls.py @@ -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"), ] diff --git a/app/organization/featured/views.py b/app/organization/featured/views.py index 2536b376..75e1f2db 100644 --- a/app/organization/featured/views.py +++ b/app/organization/featured/views.py @@ -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/0001_initial.py b/app/organization/magazine/migrations/0001_initial.py old mode 100644 new mode 100755 diff --git a/app/organization/magazine/migrations/0002_delete_category.py b/app/organization/magazine/migrations/0002_delete_category.py old mode 100644 new mode 100755 diff --git a/app/organization/magazine/migrations/0003_auto_20160728_1536.py b/app/organization/magazine/migrations/0003_auto_20160728_1536.py old mode 100644 new mode 100755 diff --git a/app/organization/magazine/migrations/0004_article_related_article.py b/app/organization/magazine/migrations/0004_article_related_article.py old mode 100644 new mode 100755 diff --git a/app/organization/magazine/migrations/0005_auto_20160728_1551.py b/app/organization/magazine/migrations/0005_auto_20160728_1551.py old mode 100644 new mode 100755 diff --git a/app/organization/magazine/migrations/0006_auto_20160728_1632.py b/app/organization/magazine/migrations/0006_auto_20160728_1632.py old mode 100644 new mode 100755 diff --git a/app/organization/magazine/migrations/0007_topic_articles.py b/app/organization/magazine/migrations/0007_topic_articles.py new file mode 100755 index 00000000..38e05711 --- /dev/null +++ b/app/organization/magazine/migrations/0007_topic_articles.py @@ -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 index 00000000..b4ca3560 --- /dev/null +++ b/app/organization/magazine/migrations/0008_auto_20160729_1233.py @@ -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'), + ), + ] diff --git a/app/organization/magazine/migrations/__init__.py b/app/organization/magazine/migrations/__init__.py old mode 100644 new mode 100755 diff --git a/app/organization/magazine/models.py b/app/organization/magazine/models.py index 64ea040b..e2d2ce1a 100644 --- a/app/organization/magazine/models.py +++ b/app/organization/magazine/models.py @@ -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') diff --git a/app/organization/magazine/urls.py b/app/organization/magazine/urls.py index e7136370..951be16a 100644 --- a/app/organization/magazine/urls.py +++ b/app/organization/magazine/urls.py @@ -14,4 +14,5 @@ _slash = "/" if settings.APPEND_SLASH else "" urlpatterns = [ url("^article/$", ArticleListView.as_view(), name="magazine-article-list"), url("^article/detail/(?P.*)%s$" % _slash, ArticleDetailView.as_view(), name="magazine-article-detail"), + url("^topic/detail/(?P.*)%s$" % _slash, TopicDetailView.as_view(), name='topic-detail'), ] diff --git a/app/organization/magazine/views.py b/app/organization/magazine/views.py index 0ad63f47..50f7cc73 100644 --- a/app/organization/magazine/views.py +++ b/app/organization/magazine/views.py @@ -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 diff --git a/app/organization/urls.py b/app/organization/urls.py index 5f4d6c42..b8cfecb2 100644 --- a/app/organization/urls.py +++ b/app/organization/urls.py @@ -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')), diff --git a/app/templates/index.html b/app/templates/index.html index d4fd3372..ba59b595 100644 --- a/app/templates/index.html +++ b/app/templates/index.html @@ -11,10 +11,24 @@ {% block main %} + +{% if topics %} +
+ {% for topic in topics %} + {% include "magazine/topic/inc_list_topic.html" %} + {% endfor %} +
+{% endif %} +
-

{% trans "Featured" %}

+ {% featured as featured_list %} {% for item in featured_list %}
{% 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 index 00000000..fa3ab682 --- /dev/null +++ b/app/templates/magazine/topic/inc_list_topic.html @@ -0,0 +1,7 @@ +{% load i18n pages_tags mezzanine_tags %} + diff --git a/app/templates/magazine/topic/topic_detail.html b/app/templates/magazine/topic/topic_detail.html new file mode 100644 index 00000000..9e54e093 --- /dev/null +++ b/app/templates/magazine/topic/topic_detail.html @@ -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 %} +
  • {% 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 %} +
  • +{% endif %} +{% endblock %} + +{% block main %} +
    +
    + +

    {{ topic.title }}

    +

    {{ topic.description }}

    + + {% for article in topic.articles.all %} + {% include 'magazine/article/includes/article_card.html' %} + {% endfor %} +
    + +{% if settings.COMMENTS_DISQUS_SHORTNAME %} +{% include "generic/includes/disqus_counts.html" %} +{% endif %} + +{% endblock %} + +{% block right_panel %} +{% include "blog/includes/filter_panel.html" %} +{% endblock %}