From a93c36849673c02fdbfcfe1e168894872cda4b60 Mon Sep 17 00:00:00 2001 From: aahnik Date: Tue, 2 Jan 2024 02:42:29 +0530 Subject: [PATCH] feature/aahq-33-activities-page --- src/activities/admin.py | 13 +++++- ...content_communityactivity_slug_and_more.py | 32 ++++++++++++++ .../0003_alter_communityactivity_title.py | 20 +++++++++ src/activities/models.py | 24 +++++++++-- src/activities/templates/activities/item.html | 42 +++++++++++++++++++ src/activities/urls.py | 9 ++++ src/activities/views.py | 12 +++++- src/home/templates/home/index.html | 24 +++++++---- src/temple_web/urls.py | 3 +- 9 files changed, 164 insertions(+), 15 deletions(-) create mode 100644 src/activities/migrations/0002_communityactivity_content_communityactivity_slug_and_more.py create mode 100644 src/activities/migrations/0003_alter_communityactivity_title.py create mode 100644 src/activities/templates/activities/item.html create mode 100644 src/activities/urls.py diff --git a/src/activities/admin.py b/src/activities/admin.py index 30f8c81..49e10c9 100644 --- a/src/activities/admin.py +++ b/src/activities/admin.py @@ -1,9 +1,20 @@ from django.contrib import admin from .models import CommunityActivity +from ckeditor_uploader.widgets import CKEditorUploadingWidget +from django import forms # Register your models here. +class CommunityActivityAdminForm(forms.ModelForm): + content = forms.CharField(widget=CKEditorUploadingWidget()) + + class Meta: + model = CommunityActivity + exclude = ["slug", "fa_icon"] + + @admin.register(CommunityActivity) class CommunityActivityAdmin(admin.ModelAdmin): - pass + form = CommunityActivityAdminForm + list_display = ["title", "activity_page"] diff --git a/src/activities/migrations/0002_communityactivity_content_communityactivity_slug_and_more.py b/src/activities/migrations/0002_communityactivity_content_communityactivity_slug_and_more.py new file mode 100644 index 0000000..f0db91a --- /dev/null +++ b/src/activities/migrations/0002_communityactivity_content_communityactivity_slug_and_more.py @@ -0,0 +1,32 @@ +# Generated by Django 4.2.1 on 2024-01-01 20:44 + +import ckeditor_uploader.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("activities", "0001_initial"), + ] + + operations = [ + migrations.AddField( + model_name="communityactivity", + name="content", + field=ckeditor_uploader.fields.RichTextUploadingField( + blank=True, null=True + ), + ), + migrations.AddField( + model_name="communityactivity", + name="slug", + field=models.SlugField(blank=True, unique=True), + ), + migrations.AlterField( + model_name="communityactivity", + name="description", + field=models.TextField( + default="Detailed activity description", max_length=1024 + ), + ), + ] diff --git a/src/activities/migrations/0003_alter_communityactivity_title.py b/src/activities/migrations/0003_alter_communityactivity_title.py new file mode 100644 index 0000000..bf1fc1e --- /dev/null +++ b/src/activities/migrations/0003_alter_communityactivity_title.py @@ -0,0 +1,20 @@ +# Generated by Django 4.2.1 on 2024-01-01 20:57 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ( + "activities", + "0002_communityactivity_content_communityactivity_slug_and_more", + ), + ] + + operations = [ + migrations.AlterField( + model_name="communityactivity", + name="title", + field=models.CharField(default="Activity Name", max_length=512), + ), + ] diff --git a/src/activities/models.py b/src/activities/models.py index ec020c9..68ef8e8 100644 --- a/src/activities/models.py +++ b/src/activities/models.py @@ -1,18 +1,34 @@ from django.db import models from utils.images import upload_image_to - -# Create your models here. +from ckeditor_uploader.fields import RichTextUploadingField +from utils.slugs import generate_unique_slug +from django.utils.html import format_html class CommunityActivity(models.Model): - title = models.CharField(max_length=512, default="Group Study") + title = models.CharField(max_length=512, default="Activity Name") summary = models.CharField(max_length=1024, default="Activity description in short") + slug = models.SlugField(unique=True, blank=True) description = models.TextField( - max_length=10240, default="Detailed activity description" + max_length=1024, default="Detailed activity description" ) fa_icon = models.TextField(max_length=100, default="fa-solid fa-graduation-cap") cover_image = models.ImageField(upload_to=upload_image_to, null=True, blank=True) + content = RichTextUploadingField(null=True, blank=True) def __str__(self): return self.title + + def save(self, *args, **kwargs): + if self.slug == "": + self.slug = generate_unique_slug(self.title, CommunityActivity) + super().save(args, kwargs) + + def get_absolute_url(self): + return f"/activity/{self.slug}" + + def activity_page(self): + return format_html( + f'View Page' + ) diff --git a/src/activities/templates/activities/item.html b/src/activities/templates/activities/item.html new file mode 100644 index 0000000..ba9bbb3 --- /dev/null +++ b/src/activities/templates/activities/item.html @@ -0,0 +1,42 @@ +{% extends "commons.html" %} +{% block title %} {{blog.title}} {% endblock title%} +{%block content %} + +
+
+
+
+ + {% if ac.cover_image %} +
+ {{ac.title}} +
+ {%endif%} +

+ {{ac.title}} +

+
+
+
+

+ {{ac.summary}} +

+ +
+
+
+ +
+ +
+ {{ac.content | safe}} +
+ +
+
+
+ +{% endblock %} \ No newline at end of file diff --git a/src/activities/urls.py b/src/activities/urls.py new file mode 100644 index 0000000..5d92686 --- /dev/null +++ b/src/activities/urls.py @@ -0,0 +1,9 @@ +from django.urls import path + +from . import views + +app_name = "activities" + +urlpatterns = [ + path("", views.activities_item, name="activities_item"), +] diff --git a/src/activities/views.py b/src/activities/views.py index 91ea44a..8a8a743 100644 --- a/src/activities/views.py +++ b/src/activities/views.py @@ -1,3 +1,13 @@ from django.shortcuts import render +from django.http import HttpRequest +from .models import CommunityActivity -# Create your views here. +import logging + +log = logging.getLogger(__name__) + + +def activities_item(request: HttpRequest, slug: str): + ac = CommunityActivity.objects.get(slug=slug) + context = {"ac": ac} + return render(request, "activities/item.html", context=context) diff --git a/src/home/templates/home/index.html b/src/home/templates/home/index.html index af15317..5d376fd 100644 --- a/src/home/templates/home/index.html +++ b/src/home/templates/home/index.html @@ -191,16 +191,24 @@

{% for activity in activities %} -
+
- + class="shadow-md border-b rounded-lg bg-gray-50 transform transition-transform duration-300 hover:translate-y-[-10px]"> + +
+

+ {{activity.title}} + +

+ {% if activity.cover_image %} + + {% endif %} +

{{ activity.summary }}

+
+
-

- {{activity.title}} -

-

{{ activity.summary }}

-
+ {% endfor %} diff --git a/src/temple_web/urls.py b/src/temple_web/urls.py index f67a980..499d526 100644 --- a/src/temple_web/urls.py +++ b/src/temple_web/urls.py @@ -33,6 +33,7 @@ path("", include("home.urls")), path("donations/", include("donations.urls")), # path("online-puja/", include("online_puja.urls")), + path("activity/", include("activities.urls")), path("accounts/", include("accounts.urls")), path("tester/", include("tester.urls")), path("users/", include("users.urls")), @@ -40,7 +41,7 @@ path("blog/", include("blog.urls")), # path("404/", views.page_not_found_view, name="404"), path("admin/", admin.site.urls), - path('ckeditor/', include('ckeditor_uploader.urls')), + path("ckeditor/", include("ckeditor_uploader.urls")), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)