diff --git a/news/__init__.py b/news/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/news/admin.py b/news/admin.py new file mode 100644 index 0000000000000000000000000000000000000000..43253c6cc5b48d7b606f34ea7e5f57f639625ee2 --- /dev/null +++ b/news/admin.py @@ -0,0 +1,10 @@ +from django.contrib import admin + +from .models import NewsItem + + +class NewsItemAdmin(admin.ModelAdmin): + search_fields = ['blurb', 'followup_link_text'] + + +admin.site.register(NewsItem, NewsItemAdmin) diff --git a/news/apps.py b/news/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..5a7b92d0f844e1bd89c73e7bba369b07298ae70a --- /dev/null +++ b/news/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class NewsConfig(AppConfig): + name = 'news' diff --git a/news/migrations/0001_initial.py b/news/migrations/0001_initial.py new file mode 100644 index 0000000000000000000000000000000000000000..4df07209043385758fe45a5f4a24096fbfd20415 --- /dev/null +++ b/news/migrations/0001_initial.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.3 on 2017-03-06 07:04 +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('scipost', '0039_auto_20170306_0804'), + ] + + state_operations = [ + migrations.CreateModel( + name='NewsItem', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('date', models.DateField()), + ('headline', models.CharField(max_length=300)), + ('blurb', models.TextField()), + ('followup_link', models.URLField(blank=True, null=True)), + ('followup_link_text', models.CharField(blank=True, max_length=300, null=True)), + ], + options={ + 'db_table': 'scipost_newsitem', + }, + ), + ] + + operations = [ + migrations.SeparateDatabaseAndState(state_operations=state_operations) + ] diff --git a/news/migrations/__init__.py b/news/migrations/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/news/models.py b/news/models.py new file mode 100644 index 0000000000000000000000000000000000000000..d421b8c4bbae2b55c595dd0d4fcec7347509dc6f --- /dev/null +++ b/news/models.py @@ -0,0 +1,52 @@ +from django.db import models +from django.template import Template, Context + + +class NewsItem(models.Model): + date = models.DateField() + headline = models.CharField(max_length=300) + blurb = models.TextField() + followup_link = models.URLField(blank=True, null=True) + followup_link_text = models.CharField(max_length=300, blank=True, null=True) + + class Meta: + db_table = 'scipost_newsitem' + + def __str__(self): + return self.date.strftime('%Y-%m-%d') + ', ' + self.headline + + def descriptor_full(self): + """ For News page. """ + descriptor = ('<div class="flex-greybox640">' + '<h3 class="NewsHeadline">{{ headline }}</h3>' + '<p>{{ date }}</p>' + '<p>{{ blurb }}</p>' + ) + context = Context({'headline': self.headline, + 'date': self.date.strftime('%Y-%m-%d'), + 'blurb': self.blurb, }) + if self.followup_link: + descriptor += '<p><a href="{{ followup_link }}">{{ followup_link_text }}</a></p>' + context['followup_link'] = self.followup_link + context['followup_link_text'] = self.followup_link_text + descriptor += '</div>' + template = Template(descriptor) + return template.render(context) + + def descriptor_small(self): + """ For index page. """ + descriptor = ('<h3 class="NewsHeadline">{{ headline }}</h3>' + '<div class="p-2">' + '<p>{{ date }}</p>' + '<p>{{ blurb }}</p>' + ) + context = Context({'headline': self.headline, + 'date': self.date.strftime('%Y-%m-%d'), + 'blurb': self.blurb, }) + if self.followup_link: + descriptor += '<p><a href="{{ followup_link }}">{{ followup_link_text }}</a></p>' + context['followup_link'] = self.followup_link + context['followup_link_text'] = self.followup_link_text + descriptor += '</div>' + template = Template(descriptor) + return template.render(context) diff --git a/news/tests.py b/news/tests.py new file mode 100644 index 0000000000000000000000000000000000000000..7ce503c2dd97ba78597f6ff6e4393132753573f6 --- /dev/null +++ b/news/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/news/urls.py b/news/urls.py new file mode 100644 index 0000000000000000000000000000000000000000..a84f2906bb39ef2937fe1a6ca284e8e6a77368e7 --- /dev/null +++ b/news/urls.py @@ -0,0 +1,7 @@ +from django.conf.urls import url + +from . import views + +urlpatterns = [ + url(r'^$', views.news, name='news'), +] diff --git a/news/views.py b/news/views.py new file mode 100644 index 0000000000000000000000000000000000000000..6e6773d73118132b4eeeb2ca1c21b4aa6b1dd138 --- /dev/null +++ b/news/views.py @@ -0,0 +1,9 @@ +from django.shortcuts import render + +from .models import NewsItem + + +def news(request): + newsitems = NewsItem.objects.all().order_by('-date') + context = {'newsitems': newsitems} + return render(request, 'scipost/news.html', context) diff --git a/scipost/migrations/0039_auto_20170306_0804.py b/scipost/migrations/0039_auto_20170306_0804.py new file mode 100644 index 0000000000000000000000000000000000000000..49894a205825fdbe083d86f688b835138d7516ce --- /dev/null +++ b/scipost/migrations/0039_auto_20170306_0804.py @@ -0,0 +1,98 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.3 on 2017-03-06 07:04 +from __future__ import unicode_literals + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('scipost', '0038_nomination_webpage'), + ] + + state_operations = [ + migrations.RemoveField( + model_name='feedback', + name='VGM', + ), + migrations.RemoveField( + model_name='feedback', + name='by', + ), + migrations.RemoveField( + model_name='motion', + name='VGM', + ), + migrations.RemoveField( + model_name='motion', + name='in_agreement', + ), + migrations.RemoveField( + model_name='motion', + name='in_disagreement', + ), + migrations.RemoveField( + model_name='motion', + name='in_notsure', + ), + migrations.RemoveField( + model_name='motion', + name='put_forward_by', + ), + migrations.DeleteModel( + name='NewsItem', + ), + migrations.RemoveField( + model_name='nomination', + name='VGM', + ), + migrations.RemoveField( + model_name='nomination', + name='by', + ), + migrations.RemoveField( + model_name='nomination', + name='in_agreement', + ), + migrations.RemoveField( + model_name='nomination', + name='in_disagreement', + ), + migrations.RemoveField( + model_name='nomination', + name='in_notsure', + ), + migrations.AlterField( + model_name='remark', + name='feedback', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='virtualmeetings.Feedback'), + ), + migrations.AlterField( + model_name='remark', + name='motion', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='virtualmeetings.Motion'), + ), + migrations.AlterField( + model_name='remark', + name='nomination', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='virtualmeetings.Nomination'), + ), + migrations.DeleteModel( + name='Feedback', + ), + migrations.DeleteModel( + name='Motion', + ), + migrations.DeleteModel( + name='Nomination', + ), + migrations.DeleteModel( + name='VGM', + ), + ] + + operations = [ + migrations.SeparateDatabaseAndState(state_operations=state_operations) + ]