diff --git a/gawa/blog/admin.py b/gawa/blog/admin.py
index 3a87df2..d976c95 100644
--- a/gawa/blog/admin.py
+++ b/gawa/blog/admin.py
@@ -12,5 +12,5 @@ class BlogPostAdmin(admin.ModelAdmin):
"""
The admin model for BlogPost
"""
- list_display = ["title_en", "subtitle_en", "title_de", "subtitle_de", "date", "category", "suburl"]
+ list_display = ["title_en", "subtitle_en", "title_de", "subtitle_de", "date", "category", "slug", "suburl", "public"]
date_hierarchy = "date"
diff --git a/gawa/blog/migrations/0003_blogpost_public.py b/gawa/blog/migrations/0003_blogpost_public.py
new file mode 100644
index 0000000..4e45995
--- /dev/null
+++ b/gawa/blog/migrations/0003_blogpost_public.py
@@ -0,0 +1,18 @@
+# Generated by Django 3.2.19 on 2023-06-03 18:52
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('blog', '0002_blogpost_category'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='blogpost',
+ name='public',
+ field=models.BooleanField(default=True),
+ ),
+ ]
diff --git a/gawa/blog/migrations/0004_blogpost_slug.py b/gawa/blog/migrations/0004_blogpost_slug.py
new file mode 100644
index 0000000..e7e4941
--- /dev/null
+++ b/gawa/blog/migrations/0004_blogpost_slug.py
@@ -0,0 +1,19 @@
+# Generated by Django 3.2.19 on 2023-06-03 19:06
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('blog', '0003_blogpost_public'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='blogpost',
+ name='slug',
+ field=models.SlugField(default='test'),
+ preserve_default=False,
+ ),
+ ]
diff --git a/gawa/blog/models.py b/gawa/blog/models.py
index f1e5761..d93344b 100644
--- a/gawa/blog/models.py
+++ b/gawa/blog/models.py
@@ -16,3 +16,5 @@ class BlogPost(Searchable):
body = models.TextField()
category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)
thumbnail = models.ImageField(blank=True)
+ public = models.BooleanField(default=True)
+ slug = models.SlugField()
diff --git a/gawa/blog/templates/blog/blogpost.html b/gawa/blog/templates/blog/blogpost.html
new file mode 100644
index 0000000..f81dcf7
--- /dev/null
+++ b/gawa/blog/templates/blog/blogpost.html
@@ -0,0 +1,53 @@
+{% extends 'base.html' %}
+{% load i18n %}
+{% get_current_language as LANGUAGE_CODE %}
+{% block languagecode %}{{ LANGUAGE_CODE }}{% endblock languagecode %}
+{% block title %}{% translate "cscherr.de" %} - {% translate "Blog" %}{% endblock title %}
+{% block nav %}
+ {% include 'blog/nav.html' %}
+{% endblock nav %}
+{% block main %}
+
+
+
{{ post.title }}
+
{% translate "Blog" %}
+
+
+
+
{% translate "Writeups" %}
+
+ {% blocktranslate %}
+ Whenever I discover some interesting security thing, I will post a writeup here.
+ {% endblocktranslate %}
+
+
+
+
{% translate "Open Source" %}
+ {% blocktranslate %}
+ If something comes up, I may post Linux guides or my thoughts on current processes here.
+ {% endblocktranslate %}
+
+
+
{% translate "Selfhosting" %}
+ {% blocktranslate %}
+ Selfhosting is something that I'm really fond of. There will be guides and thoughts about that too
+ {% endblocktranslate %}
+
+
+
{% translate "Anything Really" %}
+ {% blocktranslate %}
+ This is my personal Blog after all, I will put here whatever I want and you can't stop me.
+ {% endblocktranslate %}
+
+
+
+
+
{% translate "Looking for anything specific?" %}
+ {% include 'main_search_form.html' %}
+
+ {% include 'blog/featured.html' %}
+
+{% endblock main %}
diff --git a/gawa/blog/templates/blog/index.html b/gawa/blog/templates/blog/index.html
index 663b6fc..93a70c6 100644
--- a/gawa/blog/templates/blog/index.html
+++ b/gawa/blog/templates/blog/index.html
@@ -40,6 +40,10 @@
{% endblocktranslate %}
+
{% translate "Looking for anything specific?" %}
{% include 'main_search_form.html' %}
diff --git a/gawa/blog/templates/blog/nav.html b/gawa/blog/templates/blog/nav.html
index 3830285..e1aa14d 100644
--- a/gawa/blog/templates/blog/nav.html
+++ b/gawa/blog/templates/blog/nav.html
@@ -15,7 +15,7 @@
{% translate "Start" %}
- {% translate "Blog" %}
+ {% translate "Blog" %}
@@ -23,6 +23,7 @@
diff --git a/gawa/blog/urls.py b/gawa/blog/urls.py
index fbc2c43..45656b5 100644
--- a/gawa/blog/urls.py
+++ b/gawa/blog/urls.py
@@ -2,6 +2,10 @@ from django.urls import path
from . import views
+app_name: str = "blog"
urlpatterns = [
- path("", views.Index.as_view(), name="BlogIndex"),
+ path("", views.Index.as_view(), name="index"),
+ path("categories", views.CategoryList.as_view(), name="category_list"),
+ path("", views.ArticleList.as_view(), name="article_list"),
+ path("/", views.Post.as_view(), name="post"),
]
diff --git a/gawa/blog/views.py b/gawa/blog/views.py
index 248e96c..e3f98b7 100644
--- a/gawa/blog/views.py
+++ b/gawa/blog/views.py
@@ -1,8 +1,14 @@
-from django.shortcuts import render
+from django.shortcuts import Http404, HttpResponse, get_object_or_404, render
+from django.utils.translation import get_language
from django.views.generic import TemplateView, DetailView, ListView, View
+from .models import BlogPost, Category
from start.views import SearchableView
+import logging
+
+logger = logging.getLogger(__name__)
+
class Index(TemplateView, SearchableView):
"""
The index page of the gawa/blog app.
@@ -17,13 +23,38 @@ class Post(DetailView):
"""
Main page of a blog post
"""
- pass
+
+ model=BlogPost
+ template_name = "blog/blogpost.html"
+ context_object_name = "post"
+
+ def get_object(self, queryset=None):
+ obj = get_object_or_404(
+ BlogPost,
+ category__slug=self.kwargs['category'], # first slug is category
+ slug=self.kwargs['slug'] # second slug is article itself
+ )
+ logger.critical("hello world")
+ match get_language():
+ case 'de':
+ obj['title'] = obj['title_de']
+
+ case 'en':
+ obj['title'] = obj['title_en']
+
+ case _:
+ # this should not happen, but who knows what dumb stuff users will come up with
+ logger.warning("article for unsupported language was requested")
+ return obj
class CategoryList(ListView):
"""
Scroll through a list of blog Categories
"""
- pass
+
+ model=Category
+ template_name = "blog/categories.html"
+ context_object_name = "categories"
class ArticleList(ListView):
"""
@@ -32,4 +63,7 @@ class ArticleList(ListView):
There should also be some kind of filter, for category and date.
Of course, Articles will also show up in the MainSearchView
"""
- pass
+
+ model=BlogPost
+ template_name = "blog/posts.html"
+ context_object_name = "posts"
diff --git a/gawa/gawa/urls.py b/gawa/gawa/urls.py
index c50c36b..ab47e58 100644
--- a/gawa/gawa/urls.py
+++ b/gawa/gawa/urls.py
@@ -25,5 +25,5 @@ urlpatterns = [
urlpatterns += i18n_patterns(
path("", include("start.urls")),
path("blog/", include("blog.urls")),
- path('admin/', admin.site.urls),
+ path('admin/', admin.site.urls, name="admin"),
)
diff --git a/gawa/start/templates/main_search_form.html b/gawa/start/templates/main_search_form.html
index bf8688c..329df40 100644
--- a/gawa/start/templates/main_search_form.html
+++ b/gawa/start/templates/main_search_form.html
@@ -2,5 +2,5 @@
diff --git a/gawa/start/templates/start/nav.html b/gawa/start/templates/start/nav.html
index cedce45..3ea73d8 100644
--- a/gawa/start/templates/start/nav.html
+++ b/gawa/start/templates/start/nav.html
@@ -15,7 +15,7 @@
{% translate "Start" %}
- {% translate "Blog" %}
+ {% translate "Blog" %}
@@ -23,6 +23,7 @@