diff --git a/blogapp/migrations/0003_auto_20180219_0932.py b/blogapp/migrations/0003_auto_20180219_0932.py new file mode 100644 index 0000000..04d7339 --- /dev/null +++ b/blogapp/migrations/0003_auto_20180219_0932.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2018-02-19 09:32 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('blogapp', '0002_auto_20170529_2023'), + ] + + operations = [ + migrations.AlterField( + model_name='blogcomment', + name='user', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/blogapp/models.py b/blogapp/models.py index 5be7fe1..a09e90e 100644 --- a/blogapp/models.py +++ b/blogapp/models.py @@ -1,6 +1,7 @@ from django.db import models from django.contrib.auth.models import User + class blogcategory(models.Model): name = models.CharField(max_length=100) @@ -8,7 +9,6 @@ class blogcategory(models.Model): return self.name - class blogentry(models.Model): user = models.ForeignKey(User) date = models.DateTimeField('date') @@ -21,9 +21,10 @@ class blogentry(models.Model): def __str__(self): return self.header + class blogcomment(models.Model): blogentry = models.ForeignKey(blogentry, on_delete=models.CASCADE) - user = models.ForeignKey(User, null = True) + user = models.ForeignKey(User, null=True, blank=True) guestname = models.CharField(max_length=20) body = models.CharField(max_length=300) date = models.DateTimeField('date') diff --git a/blogapp/templates/blogapp/blogindex.html b/blogapp/templates/blogapp/blogindex.html index 4dd35e6..7ae721b 100644 --- a/blogapp/templates/blogapp/blogindex.html +++ b/blogapp/templates/blogapp/blogindex.html @@ -5,13 +5,16 @@ {% block content %} {% autoescape off %} +{% if category %} +

Blog posts for category {{ category }}

+{% endif %} {% if blogentries %} {% for blogentry in blogentries %} {% if blogentry.published %}

{{ blogentry.header }}

posted on: {{blogentry.date}} by {{blogentry.user.username}}

{{blogentry.intro|linebreaks}} -Filed under: {% for category in blogentry.categories.all %} {{ category }} {% endfor %} +Filed under: {% for category in blogentry.categories.all %} {{ category }} {% endfor %}

Read more...
{% endif %} {% endfor %} diff --git a/blogapp/urls.py b/blogapp/urls.py index 451812d..efbc034 100644 --- a/blogapp/urls.py +++ b/blogapp/urls.py @@ -5,5 +5,6 @@ from . import views urlpatterns = [ url(r'^$', views.listall, name='listall'), url(r'^(?P\d+)/$', views.detail, name='detail'), + url(r'^category/(?P\d+)/$', views.list_category, name='category'), #url(r'^$', views.detail, name='detail'), ] diff --git a/blogapp/views.py b/blogapp/views.py index 88f9db7..919267d 100644 --- a/blogapp/views.py +++ b/blogapp/views.py @@ -1,21 +1,12 @@ -from blogapp.models import blogentry, blogcomment +from blogapp.models import blogentry, blogcomment, blogcategory from django.shortcuts import render, get_object_or_404 # from django.template import RequestContext from django import forms -from imageapp.models import BlogImage +from polysite.globals import CustomRenderer import datetime import mistune -class CustomRenderer(mistune.Renderer): - def image(self, src, title, alt_text): - try: - img = BlogImage.objects.get(pk=src) - return '

Title: ' + img.title + '
Caption: ' + img.caption + '
' - except BlogImage.DoesNotExist: - return 'Should display an image here but none with id ' + src + ' was found.' - - class BlogCommentForm(forms.Form): guestname = forms.CharField() blogcomment = forms.CharField(widget=forms.Textarea(attrs={'rows': 3, 'cols': 30})) @@ -27,6 +18,13 @@ def listall(request): return render(request, 'blogapp/blogindex.html', context) +def list_category(request, category_id): + category = get_object_or_404(blogcategory, pk=category_id) + blogentries = blogentry.objects.all().filter(categories=category) + context = {'blogentries': blogentries, 'category': category} + return render(request, 'blogapp/blogindex.html', context) + + def detail(request, blogentry_id): blogdetail = get_object_or_404(blogentry, pk=blogentry_id) @@ -38,10 +36,10 @@ def detail(request, blogentry_id): bc.guestname = fml.cleaned_data['guestname'] bc.body = fml.cleaned_data['blogcomment'] bc.date = datetime.datetime.now() - bc.save + bc.save() renderer = CustomRenderer() - md = mistune.Markdown(renderer = renderer, hard_wrap = True) + md = mistune.Markdown(renderer=renderer, hard_wrap=True) blogdetail.body = md(blogdetail.body) form = BlogCommentForm() diff --git a/db.sqlite3 b/db.sqlite3 index cf512cb..7737295 100644 Binary files a/db.sqlite3 and b/db.sqlite3 differ diff --git a/imageapp/migrations/0002_auto_20180219_0932.py b/imageapp/migrations/0002_auto_20180219_0932.py new file mode 100644 index 0000000..b195aea --- /dev/null +++ b/imageapp/migrations/0002_auto_20180219_0932.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.10 on 2018-02-19 09:32 +from __future__ import unicode_literals + +from django.db import migrations, models +import imageapp.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('imageapp', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='blogimage', + name='image', + field=models.ImageField(upload_to=imageapp.models.UploadToPathAndRename('')), + ), + ] diff --git a/pageapp/views.py b/pageapp/views.py index f22567f..fabfbf6 100644 --- a/pageapp/views.py +++ b/pageapp/views.py @@ -1,17 +1,24 @@ from pageapp.models import page from django.shortcuts import render, get_object_or_404 -from django.template import RequestContext +from polysite.globals import CustomRenderer +import mistune def getpage(request, page_id): pagedetail = get_object_or_404(page, pk=page_id) + renderer = CustomRenderer() + md = mistune.Markdown(renderer=renderer, hard_wrap=True) + pagedetail.body = md(pagedetail.body) return render(request, 'pageapp/page.html', {'page': pagedetail}) + def aboutpage(request): - about = get_object_or_404(page, pk=1) - return render(request, 'pageapp/page.html', {'page': about}) + # about = get_object_or_404(page, pk=1) + # return render(request, 'pageapp/page.html', {'page': about}) + return getpage(request, 1) + def contactpage(request): - contact = get_object_or_404(page, pk=2) - return render(request, 'pageapp/page.html', {'page': contact}) - + # contact = get_object_or_404(page, pk=2) + # return render(request, 'pageapp/page.html', {'page': contact}) + return getpage(request, 2) diff --git a/polysite/globals.py b/polysite/globals.py new file mode 100644 index 0000000..15846b3 --- /dev/null +++ b/polysite/globals.py @@ -0,0 +1,25 @@ +import mistune +from imageapp.models import BlogImage +from blogapp.models import blogentry, blogcategory, blogcomment + + +class CustomRenderer(mistune.Renderer): + def image(self, src, title, alt_text): + try: + img = BlogImage.objects.get(pk=src) + return '

Title: ' + img.title + '
Caption: ' + img.caption + '
' + except BlogImage.DoesNotExist: + return 'Should display an image here but none with id ' + src + ' was found.' + + +def footer_info(request): + blogentries = blogentry.objects.all().order_by('-date')[:5] + blogcategories = blogcategory.objects.all() + blogcomments = blogcomment.objects.all().order_by('-date')[:5] + return {'blogentries': blogentries, 'blogcategories': blogcategories, 'blogcomments': blogcomments} + + +# def getincludes(request): +# eventlist = evententry.objects.all().order_by('-date')[:10] +# appointmentlist = event.objects.all().filter(eventend__gte = datetime.datetime.now()).order_by('eventstart')[:5] +# return {'eventlist' : eventlist, 'appointmentlist' : appointmentlist} diff --git a/polysite/settings.py b/polysite/settings.py index 0b4e867..4a40f8a 100644 --- a/polysite/settings.py +++ b/polysite/settings.py @@ -69,6 +69,7 @@ TEMPLATES = [ 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', + 'polysite.globals.footer_info', ], }, }, diff --git a/static/Cantarell-Regular.otf b/static/Cantarell-Regular.otf new file mode 100644 index 0000000..8597275 Binary files /dev/null and b/static/Cantarell-Regular.otf differ diff --git a/static/general.css b/static/general.css index 4d95b55..a0b8457 100644 --- a/static/general.css +++ b/static/general.css @@ -1,11 +1,17 @@ +@font-face { + font-family: Cantarell; + src: url(/static/Cantarell-Regular.otf); +} + body { color: #555; line-height: 1.5; padding: 4em 1em; + padding-bottom: 0; margin-left: auto; margin-right: auto; max-width: 50em; - font-family: "Helvetica", "Arial", sans-serif; + font-family: Cantarell, sans-serif; } h1, @@ -42,6 +48,8 @@ div#nav li{ div#main{ padding-top: 1em; + padding-bottom: 4em; + min-height: 50em; } div#textimg{ @@ -50,3 +58,21 @@ div#textimg{ margin-left: auto; margin-right: auto; } + +div#footer{ + background-color: #222222; + min-height: 15em; + color: white; +} + +.column { + float: left; + width: 33%; +} + +/* Clear floats after the columns */ +.row:after { + content: ""; + display: table; + clear: both; +} diff --git a/static/poly.svg b/static/poly.svg index e663b3a..1aff959 100644 --- a/static/poly.svg +++ b/static/poly.svg @@ -14,7 +14,7 @@ viewBox="0 0 420.96346 108.77486" id="svg2" version="1.1" - inkscape:version="0.91 r13725" + inkscape:version="0.92.2 5c3e80d, 2017-08-06" sodipodi:docname="poly.svg" inkscape:export-filename="/home/ottona/Projekte/polysite/blogapp/static/blogapp/poly.png" inkscape:export-xdpi="35.141472" @@ -28,23 +28,29 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="0.9899495" - inkscape:cx="-54.469216" - inkscape:cy="-24.655005" + inkscape:zoom="2.8" + inkscape:cx="304.30863" + inkscape:cy="22.855508" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" showguides="true" inkscape:guide-bbox="true" - inkscape:window-width="1920" - inkscape:window-height="1010" + inkscape:window-width="3840" + inkscape:window-height="2044" inkscape:window-x="0" - inkscape:window-y="33" + inkscape:window-y="60" inkscape:window-maximized="1" fit-margin-top="0" fit-margin-left="0" fit-margin-right="0" - fit-margin-bottom="0" /> + fit-margin-bottom="0"> + + @@ -53,7 +59,7 @@ image/svg+xml - + @@ -124,37 +130,17 @@ inkscape:export-filename="/home/ottona/Projekte/polysite/static/poly.png" inkscape:export-xdpi="35.91761" inkscape:export-ydpi="35.91761" /> - - - - - - - - - + polylux diff --git a/templates/base.html b/templates/base.html index a861f1f..fd3ff90 100644 --- a/templates/base.html +++ b/templates/base.html @@ -25,7 +25,38 @@ {% endblock %} + + +