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 %}
+