From 3ae48d5602377b18579adfe6fc152c5e96c3a66d Mon Sep 17 00:00:00 2001 From: Dominic DiTaranto Date: Mon, 30 Mar 2026 22:15:55 -0400 Subject: [PATCH] dynamic design --- db.sqlite3 | Bin 135168 -> 151552 bytes web/admin.py | 7 ++- .../0002_linktree_show_sitesection.py | 58 ++++++++++++++++++ web/migrations/0003_linktree_color.py | 18 ++++++ web/migrations/0004_alter_linktree_color.py | 18 ++++++ web/models.py | 54 ++++++++++++++++ web/templates/index.html | 47 +------------- web/templates/socials.html | 33 +++------- web/views.py | 17 +++-- 9 files changed, 175 insertions(+), 77 deletions(-) create mode 100644 web/migrations/0002_linktree_show_sitesection.py create mode 100644 web/migrations/0003_linktree_color.py create mode 100644 web/migrations/0004_alter_linktree_color.py diff --git a/db.sqlite3 b/db.sqlite3 index eb47e4a0470cb77461050f918e530c9a08b7a369..049e3601f38f4383659249d3341112d5fc59fc5d 100644 GIT binary patch delta 6136 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 delta 600 zcmX|;Ur1AN6vuyO_s+Zhw!5R-Zb432U`T&#D``zjY!r2KK?Ooj%UzJIS=%II>v2CM z2&Hmf%mc!Z^-j0mpF~6`h^H zJ$@V40fR$IE}b7x2D6#mz^!~*QkBp_2&m(s79KwnpZX%yepawlrTV!4SpqIp@6Tq^ zx0O4Yd~U=?tpWjy1pnX%T*pPMSTl<{Q&27TKHvhbSyedGrL&aFn2lfOxq!H=3Rf&p z5{>1A&+86HyN^eXhNIDwkxpYHe<0|wQyDy8#n-N^yG&)BMW`W9FW5bHlnKf>i8VAa zYjHH>xrHDXz=SGPEy)%%5*yExhbTWqu+6jTTx)nE7TseFe)~0k%C%j0+h5ydm?Txw zqq8(mS+7^vd$R-Bhz6IS)m%IW-JA_Jbyfp&?IQF8d@8e#=5`#YzscIyPx=TBd4|PT z?w|CB=14+oIkwO2OTtrXzKg+%P3wunym?-RM*!4-O)ktyII0O1IIOd)sEy76v&dsj zc)3ebs0}XxuRU3U8`l2{1b^cfe2)t_gJW3GSrWCv3OwW_x~d7)-IfYe2e$+8K!jBkJ^PD@S1mb;C|yj<~gw0 diff --git a/web/admin.py b/web/admin.py index fc43d14..7277d1f 100644 --- a/web/admin.py +++ b/web/admin.py @@ -1,6 +1,9 @@ from django.contrib import admin -from web.models import MailingList +from web.models import MailingList, SiteSection, SiteSectionAdmin, LinkTree, LinkTreeAdmin, Show, ShowAdmin admin.site.register(MailingList) +admin.site.register(SiteSection, SiteSectionAdmin) +admin.site.register(LinkTree, LinkTreeAdmin) +admin.site.register(Show, ShowAdmin) -# Register your models here. +# Register active models here. diff --git a/web/migrations/0002_linktree_show_sitesection.py b/web/migrations/0002_linktree_show_sitesection.py new file mode 100644 index 0000000..b75b4d6 --- /dev/null +++ b/web/migrations/0002_linktree_show_sitesection.py @@ -0,0 +1,58 @@ +# Generated by Django 6.0.1 on 2026-03-31 01:53 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('web', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='LinkTree', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True, null=True)), + ('updated_at', models.DateTimeField(auto_now=True, null=True)), + ('active', models.BooleanField(default=True)), + ('name', models.CharField(max_length=254)), + ('url', models.TextField()), + ('order', models.IntegerField()), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='Show', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True, null=True)), + ('updated_at', models.DateTimeField(auto_now=True, null=True)), + ('active', models.BooleanField(default=True)), + ('name', models.CharField(max_length=254)), + ('description', models.TextField()), + ('location', models.CharField(max_length=254)), + ('date', models.DateTimeField(auto_now_add=True, null=True)), + ], + options={ + 'abstract': False, + }, + ), + migrations.CreateModel( + name='SiteSection', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created_at', models.DateTimeField(auto_now_add=True, null=True)), + ('updated_at', models.DateTimeField(auto_now=True, null=True)), + ('active', models.BooleanField(default=True)), + ('section', models.CharField(max_length=254)), + ('content', models.TextField()), + ], + options={ + 'abstract': False, + }, + ), + ] diff --git a/web/migrations/0003_linktree_color.py b/web/migrations/0003_linktree_color.py new file mode 100644 index 0000000..5fd84d9 --- /dev/null +++ b/web/migrations/0003_linktree_color.py @@ -0,0 +1,18 @@ +# Generated by Django 6.0.1 on 2026-03-31 02:07 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('web', '0002_linktree_show_sitesection'), + ] + + operations = [ + migrations.AddField( + model_name='linktree', + name='color', + field=models.CharField(choices=[('WHITE', 'btn-light'), ('GREEN', 'btn-success'), ('RED', 'btn-danger')], default='WHITE', max_length=254), + ), + ] diff --git a/web/migrations/0004_alter_linktree_color.py b/web/migrations/0004_alter_linktree_color.py new file mode 100644 index 0000000..5b22dca --- /dev/null +++ b/web/migrations/0004_alter_linktree_color.py @@ -0,0 +1,18 @@ +# Generated by Django 6.0.1 on 2026-03-31 02:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('web', '0003_linktree_color'), + ] + + operations = [ + migrations.AlterField( + model_name='linktree', + name='color', + field=models.CharField(choices=[('btn-light', 'WHITE'), ('btn-success', 'GREEN'), ('btn-danger', 'RED')], default='WHITE', max_length=254), + ), + ] diff --git a/web/models.py b/web/models.py index 82a3ef2..7dba61a 100644 --- a/web/models.py +++ b/web/models.py @@ -1,4 +1,5 @@ from django.db import models +from django.contrib import admin class BaseModel(models.Model): @@ -12,3 +13,56 @@ class BaseModel(models.Model): class MailingList(BaseModel): email = models.EmailField(max_length=254, blank=False, null=False) + + +class SiteSection(BaseModel): + section = models.CharField(max_length=254, blank=False, null=False) + content = models.TextField() + + +class SiteSectionAdmin(admin.ModelAdmin): + search_fields = ( + ) + + list_display = ( + 'section', + ) + + +class LinkTree(BaseModel): + name = models.CharField(max_length=254, blank=False, null=False) + url = models.TextField() + order = models.IntegerField() + color = models.CharField(max_length=254, choices=[("btn-light", "WHITE"), ("btn-success", "GREEN"), ("btn-danger", "RED")], default="WHITE") + + +class LinkTreeAdmin(admin.ModelAdmin): + search_fields=( + ) + + list_display=( + 'name', + 'url', + 'order', + 'color' + ) + + +class Show(BaseModel): + name=models.CharField(max_length=254, blank=False, null=False) + description=models.TextField() + location=models.CharField(max_length=254, blank=False, null=False) + date=models.DateTimeField(blank=True, null=True, auto_now_add=True) + + +class ShowAdmin(admin.ModelAdmin): + search_fields=( + ) + + list_display=( + 'name', + 'description', + 'location', + 'date', + 'active' + ) diff --git a/web/templates/index.html b/web/templates/index.html index 990bdc5..f290cc8 100644 --- a/web/templates/index.html +++ b/web/templates/index.html @@ -37,52 +37,7 @@
-

About Us:

-

- SHRINKIN-MINKIN thrives on the fringes of genre, violating the confines of classification. - Founded in 2022 by singer/guitarists Dominic DiTaranto and Michael Heinfling; - SHRINKIN-MINKIN blends Rock, Funk, Jazz, Punk, infused with creative improvisation and FX landscape. - The NJ based 5-piece is tight. Technical, Playful, and dripping with thirst-quenching satire. -

- -

- Their musical multiplicity allows SHRINKIN-MINKIN to fit into any lineup. - Their songs range from the Funk, Rock, Hip Hop, Gospel fusion of "GLOP"; - to Post-Punk anthems like "Industry Rock" and the comical love-lament of "Butter Queen". - Songs that are guaranteed to get asses convulsing in rhythmic fervor. - More discerning listeners can relax and watch the band trade solos on "Down Polypore Wood". - Add in Alternative ballads, Blues tracks, and even a Psychedelic-Waltz and you will begin to scratch - the surface of what SHRINKIN-MINKIN has to offer. -

- Book Us now to support or headline! -

-

- Members: -
Dominic DiTaranto - Guitar/Vocals/Synth -
Michael Heinfling - Guitar/Vocals -
Charlie Misch - Keyboard/Synth -
B.S. Ashford - Bass -
Recon Paul - Drums -

- - -

- Recommended if you like: - Frank Zappa, - King Crimson, - Talking Heads, - David Bowie, - Mahavishnu Orchestra, - Phish, - Miles Davis, - The Stooges, - Funkadelic, - John Coltrane, - The Stranglers, - The Damned, - Weather Report, - The Cars -

+ {{synopsis|safe}}
diff --git a/web/templates/socials.html b/web/templates/socials.html index 8d6b82f..7c1cf4b 100644 --- a/web/templates/socials.html +++ b/web/templates/socials.html @@ -10,31 +10,14 @@ height: 42px" src="https://bandcamp.com/EmbeddedPlayer/album=4037494074/size=small/bgcol=ffffff/linkcol=0687f5/transparent=true/" seamless>Tyrannizing Harmonics by shrinkin-minkin - - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
+ + {% for link in links %} + + + +
+
+ {% endfor %}

diff --git a/web/views.py b/web/views.py index f26f335..2972ba3 100644 --- a/web/views.py +++ b/web/views.py @@ -1,11 +1,16 @@ from django.contrib import messages from django.shortcuts import render, redirect -from web.models import MailingList - +from web.models import MailingList, SiteSection, LinkTree def index(request): - return render(request, 'index.html') + synopsis = SiteSection.objects.filter(section="Synopsis").first() + + context = { + "synopsis": synopsis.content + } + + return render(request, 'index.html', context=context) def album(request): @@ -13,7 +18,11 @@ def album(request): def socials(request): - return render(request, 'socials.html') + links = LinkTree.objects.filter(active=True).order_by("order").all() + context = { + "links": links + } + return render(request, 'socials.html', context=context) def mailing_list(request):