diff --git a/chipy_org/apps/profiles/migrations/0010_customflatpage.py b/chipy_org/apps/profiles/migrations/0010_customflatpage.py new file mode 100644 index 00000000..5021e701 --- /dev/null +++ b/chipy_org/apps/profiles/migrations/0010_customflatpage.py @@ -0,0 +1,58 @@ +# Generated by Django 5.1.5 on 2025-03-21 15:31 + + + +from django.contrib.flatpages.models import FlatPage +from django.db import models + +class CustomFlatPage(FlatPage): # ✅ Extends FlatPage + header_image = models.ImageField(upload_to="flatpage_headers/", blank=True, null=True) + static_header_image = models.CharField( + max_length=255, blank=True, null=True, + help_text="Enter a static image path if not using an uploaded image." + ) + + def get_header_image_url(self): + """Return the best available header image.""" + if self.header_image: + return self.header_image.url + if self.static_header_image: + return f"/static/images/headers/{self.static_header_image}" + return "/static/images/default-header.jpg" + + + + +iimport django.db.models.deletion +from django.db import migrations, models + +class Migration(migrations.Migration): + + dependencies = [ + ('flatpages', '0001_initial'), # Adjust this dependency if necessary + ('profiles', '0009_alter_userprofile_role'), + ] + + operations = [ + migrations.CreateModel( + name='CustomFlatPage', + fields=[ + ('flatpage_ptr', models.OneToOneField( + auto_created=True, + on_delete=django.db.models.deletion.CASCADE, + parent_link=True, + primary_key=True, + serialize=False, + to='flatpages.flatpage' + )), + ('header_image', models.ImageField(upload_to="flatpage_headers/", blank=True, null=True)), + ('static_header_image', models.CharField( + max_length=255, blank=True, null=True, + help_text="Enter a static image path if not using an uploaded image." + )), + ], + bases=('flatpages.flatpage',), + ), + ] + + diff --git a/chipy_org/apps/profiles/models.py b/chipy_org/apps/profiles/models.py index dcbf2fe1..429d4dad 100644 --- a/chipy_org/apps/profiles/models.py +++ b/chipy_org/apps/profiles/models.py @@ -1,9 +1,28 @@ from django.contrib.auth.models import User +from django.contrib.flatpages.models import FlatPage from django.db import models from django.db.models.signals import post_save from django.dispatch import receiver +class CustomFlatPage(FlatPage): + HEADER_IMAGE_CHOICES = [("chicago-bg.jpg", "Header 1")] + + header_image = models.CharField( + max_length=255, + choices=HEADER_IMAGE_CHOICES, + blank=True, + null=True, + help_text="Select a header image for this page.", + ) + + def get_header_image_url(self): + """Returns the full URL of the selected header image.""" + if self.header_image: + return f"/static/images/{self.header_image}" + return "/static/images/default.jpg" + + class UserProfile(models.Model): class Role(models.TextChoices): MEMBER = "MEMBER", "Member" diff --git a/chipy_org/apps/profiles/views.py b/chipy_org/apps/profiles/views.py index 81f9cbe5..70c3c5e9 100644 --- a/chipy_org/apps/profiles/views.py +++ b/chipy_org/apps/profiles/views.py @@ -1,8 +1,14 @@ from django.contrib.auth.models import User +from django.shortcuts import get_object_or_404, render from django.views.generic import ListView, UpdateView from .forms import ProfileForm -from .models import UserProfile +from .models import CustomFlatPage, UserProfile + + +def custom_flatpage_view(request, url): + flatpage = get_object_or_404(CustomFlatPage, url=url) + return render(request, "shiny/slim.html", {"flatpage": flatpage}) class ProfilesList(ListView): diff --git a/chipy_org/templates/flatpages/default.html b/chipy_org/templates/flatpages/default.html index 3aa1578f..c38e59c6 100644 --- a/chipy_org/templates/flatpages/default.html +++ b/chipy_org/templates/flatpages/default.html @@ -1,7 +1,15 @@ {% extends "shiny/slim.html" %} -{% block page_header %}{{ flatpage.title | upper }}{% endblock %} + +{% block page_header %} + {{ flatpage.title | upper }} +{% endblock %} + {% block body %} + +
- {{ flatpage.content }} -
+ {{ flatpage.content }} + {% endblock %} diff --git a/chipy_org/views.py b/chipy_org/views.py new file mode 100644 index 00000000..60f8eb0b --- /dev/null +++ b/chipy_org/views.py @@ -0,0 +1,10 @@ +from django.shortcuts import render + +from .models import CustomFlatPage + + +def custom_flatpage_view(request, url): + flatpage = CustomFlatPage.objects.filter(url=url).first() + if not flatpage: + return render(request, "404.html", status=404) + return render(request, "shiny/slim.html", {"flatpage": flatpage})