From 7509da286bccd1dda358507cd455f9297db59247 Mon Sep 17 00:00:00 2001 From: luxagraf Date: Sun, 15 Nov 2020 10:13:08 -0500 Subject: ported jrnl building to posts --- app/pages/admin.py | 16 +++- app/pages/migrations/0007_homepage.py | 28 +++++++ app/pages/migrations/0008_auto_20201114_0934.py | 30 ++++++++ app/pages/models.py | 15 ++++ app/pages/templates/pages/homepage.html | 98 +++++++++++++++++++++++++ app/pages/views.py | 24 +++++- 6 files changed, 208 insertions(+), 3 deletions(-) create mode 100644 app/pages/migrations/0007_homepage.py create mode 100644 app/pages/migrations/0008_auto_20201114_0934.py create mode 100644 app/pages/templates/pages/homepage.html (limited to 'app/pages') diff --git a/app/pages/admin.py b/app/pages/admin.py index 5cd2b23..4b4dcce 100644 --- a/app/pages/admin.py +++ b/app/pages/admin.py @@ -1,10 +1,11 @@ from django.contrib import admin +from utils.widgets import LGEntryForm from django import forms from django.forms import Textarea from django.db import models -from pages.models import Page +from pages.models import Page, HomePage class PageEntryForm(forms.ModelForm): @@ -16,6 +17,7 @@ class PageEntryForm(forms.ModelForm): } +@admin.register(Page) class PageAdmin(admin.ModelAdmin): form = PageEntryForm list_display = ('title', 'slug', 'path', 'app', 'build') @@ -32,4 +34,14 @@ class PageAdmin(admin.ModelAdmin): }) ) -admin.site.register(Page, PageAdmin) + +@admin.register(HomePage) +class HomePageAdmin(admin.ModelAdmin): + form = LGEntryForm + filter_horizontal = ('popular',) + + class Media: + js = ('image-loader.js', 'next-prev-links.js') + css = { + "all": ("my_styles.css",) + } diff --git a/app/pages/migrations/0007_homepage.py b/app/pages/migrations/0007_homepage.py new file mode 100644 index 0000000..c11aae9 --- /dev/null +++ b/app/pages/migrations/0007_homepage.py @@ -0,0 +1,28 @@ +# Generated by Django 3.1 on 2020-11-14 09:30 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('posts', '0015_post_old_image'), + ('photos', '0019_auto_20190704_0903'), + ('pages', '0006_page_enable_comments'), + ] + + operations = [ + migrations.CreateModel( + name='HomePage', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('image_offset_vertical', models.CharField(help_text='add negative top margin to shift image (include css unit)', max_length=20)), + ('tag_line', models.CharField(max_length=200, null=True)), + ('template_name', models.CharField(help_text='full path', max_length=200)), + ('featured', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='banner', to='posts.post')), + ('featured_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='photos.luximage')), + ('popular', models.ManyToManyField(related_name='popular', to='posts.Post')), + ], + ), + ] diff --git a/app/pages/migrations/0008_auto_20201114_0934.py b/app/pages/migrations/0008_auto_20201114_0934.py new file mode 100644 index 0000000..e8465a6 --- /dev/null +++ b/app/pages/migrations/0008_auto_20201114_0934.py @@ -0,0 +1,30 @@ +# Generated by Django 3.1 on 2020-11-14 09:34 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('photos', '0019_auto_20190704_0903'), + ('pages', '0007_homepage'), + ] + + operations = [ + migrations.AlterField( + model_name='homepage', + name='featured_image', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='photos.luximage'), + ), + migrations.AlterField( + model_name='homepage', + name='tag_line', + field=models.CharField(blank=True, max_length=200, null=True), + ), + migrations.AlterField( + model_name='homepage', + name='template_name', + field=models.CharField(blank=True, help_text='full path', max_length=200, null=True), + ), + ] diff --git a/app/pages/models.py b/app/pages/models.py index 5e9cd5b..8caa29e 100644 --- a/app/pages/models.py +++ b/app/pages/models.py @@ -2,6 +2,8 @@ import re from django.db import models from django.contrib.sitemaps import Sitemap +from photos.models import LuxImage +from posts.models import Post from utils.util import markdown_to_html, render_images @@ -33,6 +35,19 @@ class Page(models.Model): super(Page, self).save() +class HomePage(models.Model): + """ + simple model to control the featured article on the homepage + also allows me to fudge the "popular" section to be what I want + """ + image_offset_vertical = models.CharField(max_length=20, help_text="add negative top margin to shift image (include css unit)") + featured_image = models.ForeignKey(LuxImage, on_delete=models.CASCADE) + tag_line = models.CharField(max_length=200, null=True, blank=True) + featured = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="banner") + popular = models.ManyToManyField(Post, related_name="popular") + template_name = models.CharField(max_length=200, help_text="full path", null=True, blank=True) + + class PageSitemap(Sitemap): changefreq = "never" priority = 1.0 diff --git a/app/pages/templates/pages/homepage.html b/app/pages/templates/pages/homepage.html new file mode 100644 index 0000000..c8075ea --- /dev/null +++ b/app/pages/templates/pages/homepage.html @@ -0,0 +1,98 @@ +{% extends 'base.html' %} +{% load typogrify_tags %} +{% block sitename %} + + Luxagraf: thoughts on ecology, culture, travel, photography, walking and other ephemera + {%endblock%} + + {%block extrahead%} + +{%endblock%} +{%block bodyid%}id="home" class="archive"{%endblock%} + +{% block primary %} +
+

About Luxagraf

+ map of travels +

We’re a family of five living full time in a vintage 1969 Dodge Travco motorhome. We’ve been at it for three years now. People always ask: What's it like for five people to live in a 26ft RV? Why do we live this way?

+

The short answer is simple: because we like it and we can. If you want more than a soundbite, read through the journal. If you like it, sign up for the newsletter, Friends of a Long Year. I'd also subscribe to the RSS feed, but that's just me.

+
+ +
+
Browse the Archives
+
+{% endblock %} + +{% block js %}{% comment %} {% endcomment%}{% endblock%} diff --git a/app/pages/views.py b/app/pages/views.py index 167ad01..ed8d380 100644 --- a/app/pages/views.py +++ b/app/pages/views.py @@ -1,6 +1,9 @@ from utils.views import LuxDetailView +from django.views.generic import DetailView -from .models import Page +from locations.models import LuxCheckIn +from posts.models import Post, PostType +from .models import Page, HomePage class PageDetailView(LuxDetailView): @@ -15,3 +18,22 @@ class PageDetailTXTView(LuxDetailView): model = Page slug_field = "slug" template_name = "pages/page_detail.txt" + + +class HomePageList(DetailView): + """ + Return a main entry and list of Entries in reverse chronological order + """ + model = HomePage + + def get_template_names(self): + return ["pages/%s.html" % self.template_name, 'pages/homepage.html'] + + def get_context_data(self, **kwargs): + # Call the base implementation first to get a context + context = super(HomePageList, self).get_context_data(**kwargs) + context['object_list'] = Post.objects.filter(post_type=PostType.JRNL).filter(status__exact=1).order_by('-pub_date').exclude().select_related('location').select_related('featured_image')[1:9] + context['location'] = LuxCheckIn.objects.latest() + return context + + -- cgit v1.2.3-70-g09d2