From d1fe5bb1876d1086fde1f0ef79a1df130be95001 Mon Sep 17 00:00:00 2001 From: Amir Date: Mon, 16 Sep 2024 20:16:16 +0200 Subject: [PATCH] Change to content to Orderable --- about/__pycache__/models.cpython-310.pyc | Bin 1078 -> 1058 bytes ...move_aboutpage_section_two_img_and_more.py | 44 ++++ ..._one_img_aboutpage_intro_image_and_more.py | 28 +++ ...06_aboutpage_section_one_image_and_more.py | 32 +++ ...e_section_two_img_and_more.cpython-310.pyc | Bin 0 -> 1502 bytes ...tpage_intro_image_and_more.cpython-310.pyc | Bin 0 -> 728 bytes ...section_one_image_and_more.cpython-310.pyc | Bin 0 -> 835 bytes about/models.py | 26 +- db.sqlite3 | Bin 1241088 -> 1458176 bytes home/__pycache__/models.cpython-310.pyc | Bin 1626 -> 1523 bytes ...n_one_img_homepage_intro_image_and_more.py | 47 ++++ ...move_homepage_section_five_img_and_more.py | 61 +++++ .../0008_alter_homepagesections_id.py | 18 ++ ...epage_intro_image_and_more.cpython-310.pyc | Bin 0 -> 1572 bytes ..._section_five_img_and_more.cpython-310.pyc | Bin 0 -> 1014 bytes ..._alter_homepagesections_id.cpython-310.pyc | Bin 0 -> 671 bytes home/models.py | 79 +++--- .../settings/__pycache__/base.cpython-310.pyc | Bin 3295 -> 3352 bytes saburly/settings/base.py | 2 + services/__pycache__/models.cpython-310.pyc | Bin 2769 -> 2431 bytes .../migrations/0006_servicespagesections.py | 31 +++ ...lter_servicespagesections_section_image.py | 20 ++ ...e_text_servicespage_intro_text_and_more.py | 34 +++ ..._servicespage_section_five_img_and_more.py | 80 ++++++ ...ervicespagesubsection_sub_section_title.py | 17 ++ ..._servicespage_sub_section_five_and_more.py | 61 +++++ .../0006_servicespagesections.cpython-310.pyc | Bin 0 -> 1224 bytes ...pagesections_section_image.cpython-310.pyc | Bin 0 -> 827 bytes ...espage_intro_text_and_more.cpython-310.pyc | Bin 0 -> 1063 bytes ..._section_five_img_and_more.cpython-310.pyc | Bin 0 -> 1906 bytes ...bsection_sub_section_title.cpython-310.pyc | Bin 0 -> 606 bytes ..._sub_section_five_and_more.cpython-310.pyc | Bin 0 -> 1033 bytes services/models.py | 140 ++++------- templates/about/about_page.html | 14 +- templates/base.html | 1 - templates/home/home_page.html | 118 ++++----- templates/services/services_page.html | 236 +++++++----------- 37 files changed, 718 insertions(+), 371 deletions(-) create mode 100644 about/migrations/0004_remove_aboutpage_section_two_img_and_more.py create mode 100644 about/migrations/0005_rename_section_one_img_aboutpage_intro_image_and_more.py create mode 100644 about/migrations/0006_aboutpage_section_one_image_and_more.py create mode 100644 about/migrations/__pycache__/0004_remove_aboutpage_section_two_img_and_more.cpython-310.pyc create mode 100644 about/migrations/__pycache__/0005_rename_section_one_img_aboutpage_intro_image_and_more.cpython-310.pyc create mode 100644 about/migrations/__pycache__/0006_aboutpage_section_one_image_and_more.cpython-310.pyc create mode 100644 home/migrations/0006_rename_section_one_img_homepage_intro_image_and_more.py create mode 100644 home/migrations/0007_remove_homepage_section_five_img_and_more.py create mode 100644 home/migrations/0008_alter_homepagesections_id.py create mode 100644 home/migrations/__pycache__/0006_rename_section_one_img_homepage_intro_image_and_more.cpython-310.pyc create mode 100644 home/migrations/__pycache__/0007_remove_homepage_section_five_img_and_more.cpython-310.pyc create mode 100644 home/migrations/__pycache__/0008_alter_homepagesections_id.cpython-310.pyc create mode 100644 services/migrations/0006_servicespagesections.py create mode 100644 services/migrations/0007_alter_servicespagesections_section_image.py create mode 100644 services/migrations/0008_rename_section_one_text_servicespage_intro_text_and_more.py create mode 100644 services/migrations/0009_remove_servicespage_section_five_img_and_more.py create mode 100644 services/migrations/0010_remove_servicespagesubsection_sub_section_title.py create mode 100644 services/migrations/0011_remove_servicespage_sub_section_five_and_more.py create mode 100644 services/migrations/__pycache__/0006_servicespagesections.cpython-310.pyc create mode 100644 services/migrations/__pycache__/0007_alter_servicespagesections_section_image.cpython-310.pyc create mode 100644 services/migrations/__pycache__/0008_rename_section_one_text_servicespage_intro_text_and_more.cpython-310.pyc create mode 100644 services/migrations/__pycache__/0009_remove_servicespage_section_five_img_and_more.cpython-310.pyc create mode 100644 services/migrations/__pycache__/0010_remove_servicespagesubsection_sub_section_title.cpython-310.pyc create mode 100644 services/migrations/__pycache__/0011_remove_servicespage_sub_section_five_and_more.cpython-310.pyc diff --git a/about/__pycache__/models.cpython-310.pyc b/about/__pycache__/models.cpython-310.pyc index 6dcc38814c9cb5b3c16163f81fe228c8dfb4f946..5df5ad67a603866c05aa3275214ba2fd934c3462 100644 GIT binary patch delta 219 zcmdnSv512=pO=@50SG2ryhuB?k@q%ZJ$GhaNl|`$NoGk->MfSE(wrPk##@}pIf=!^ zd5O8Hx45A4sTC!+plUO76Vp>~v3i0u0u{4oq$Z|h=B3{fEKW@>$;{7-&(BMR8YqAw z1Tq6fQD&|H(5NczV2DNq|Gd=6-As<$!aye$iGT>v$=8`w*`z>Bsl`mpi~L<&enlrJ9n=eVrcn+Dm&b(1Q;}XP2_9v?amWotfo)v){~a-f9IFJzw1Uef+L&S-)vz z^>ImgOkeSc1Xy4v*1$F+8#rck2Q?a5QcoL$M(Pbb+xpG|2i*4-xY(HZ@0@`T_KDT0 z{XsFT;|^0n8b?x;ah?^bp5}l_G19)(XOoo2^cBC7K!ZA9U;~Q?8Qn=uV?b@r7W4Yb zys?X#>D`8pU>81~*TyWWLp!nw`;(s;+?qR)JGcR#5*vHUe}2UR zQBo7bd{(Nj`~ChsE-@1+axuOerx7=vsfdslIMSr?JVS0g8SpfhNdLFqh^Q2C5~sAV zP`my9m)~$A7E9!_X_5;-Fh1ok0!rJp_r99A4wD?f@)4Br6SMy8J;V@KpBf9zCabeMmfw2 ztk8oZmnF|7pzJuRHcUizraan3DTajTX0s$wtz{}YjgBpEQn#pZY1Qevnmg5A*ounJ zi#0<-cS#0e_(W|*nF=K)I@c-{R_518hQ&+!&c)UTly{B2Q!^RJT}nglX>nVN&qxrt zp4m;DMamPyqLgA(b{rX!Q`N^YCQztGJ~ij!xU-`?Zs0jr0jD~{EJ2!woc}ZviRlp1 z0H>G%W}_Gj$#kgZOHA|Ec%%cW=7Ayoxvr{ov^)GZj`pb>l|Ou%l^CI{w8mmf@^ihi z^)ep4IwcAhOU+3gC9|SLshTeYwP`7m@2QA&n20RO6@#Jj429IDs&TM?a{hy3VoS-%(Fd8cgOh$CeY5t literal 0 HcmV?d00001 diff --git a/about/migrations/__pycache__/0005_rename_section_one_img_aboutpage_intro_image_and_more.cpython-310.pyc b/about/migrations/__pycache__/0005_rename_section_one_img_aboutpage_intro_image_and_more.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3778a33b7743e33f41c8d531f0e93bf5aa31020 GIT binary patch literal 728 zcmZuv&2H2%5VrHPo6WYOT*{pTQiQbG1Kbem0hJRyw6|O=@6HgsBzADJl%CVs@nI_)Kh`tA4mF@&E9@;j9dq+@ z^ubew4Y=HNc&q<6W{)Wz+_fs-nHEdgDqFt7{{3LOvX`r^ZLZ27L3#ghC29DaGz=rh z#}3MQnS-Vyb?)?BbXPW}p%YsD6LJ}g;^a?~M%;hN&HqsLJJg(!#xvMRU7H20!rj9D Z{VjIr5w&&Mi=99(xu4{J*MsOd{tNYc(<1-? literal 0 HcmV?d00001 diff --git a/about/migrations/__pycache__/0006_aboutpage_section_one_image_and_more.cpython-310.pyc b/about/migrations/__pycache__/0006_aboutpage_section_one_image_and_more.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c96bc57c9be0bf0a17fb8cedee2893d84cfb55c GIT binary patch literal 835 zcmZ`%&2G~`5Z<-diR~naN(c$wzzD^;fDl5cl`1&3LbM0u%W9LEI!^tQt{p+oaLp6& z1iaE-xxkGx5-PKsmL?J%X~r|NGvjZ*-DWh38OhfdKhCtz*moOji=beiw0%Mb81Ry1 zoW5S^Ret7k_LhMU;tKdec@Wb#aEtW|}w#hFDcn;K4tLFS2f70(P*N7=VouWmC8&d1AsRULjR-6J5`jX=ODFa^uCzQPYKKB zd~k>*c6ekrFmbcQ>udeS^dp+&%EY|p!9nYL=W(&c69SW0i-LrRoC z-{N+gf?bBk%S-z_S)a6hN+x8UFRn!3agPtV_;Z&huEJlgGYQPS>;1-?_4EUpVb#%De+jTbHV_O)$+Hm@sTMRvm!5i|2{$D=J?mz$l literal 0 HcmV?d00001 diff --git a/about/models.py b/about/models.py index 38f64098..67f9f2dd 100644 --- a/about/models.py +++ b/about/models.py @@ -10,25 +10,25 @@ from saburly.custom_editor import FULL_EDITOR class AboutPage(Page): + intro_title = RichTextField(blank=True, features=FULL_EDITOR) + intro_text = RichTextField(blank=True, features=FULL_EDITOR) + intro_image = RichTextField(blank=True, features=FULL_EDITOR) + section_one_title = RichTextField(blank=True, features=FULL_EDITOR) section_one_text = RichTextField(blank=True, features=FULL_EDITOR) - section_one_img = RichTextField(blank=True, features=FULL_EDITOR) - - section_two_title = RichTextField(blank=True, features=FULL_EDITOR) - section_two_text = RichTextField(blank=True, features=FULL_EDITOR) - section_two_img = RichTextField(blank=True, features=FULL_EDITOR) + section_one_image = RichTextField(blank=True, features=FULL_EDITOR) content_panels = Page.content_panels + [ MultiFieldPanel([ - FieldPanel('section_one_title', classname="full"), - FieldPanel('section_one_text', classname="full"), - FieldPanel('section_one_img', classname="full"), - ], heading="Section One"), + FieldPanel('intro_title', classname="full"), + FieldPanel('intro_text', classname="full"), + FieldPanel('intro_image', classname="full"), + ], heading="Intro"), MultiFieldPanel([ - FieldPanel('section_two_title', classname="full"), - FieldPanel('section_two_text', classname="full"), - FieldPanel('section_two_img', classname="full"), - ], heading="Section Two"), + FieldPanel('section_one_title', classname="full"), + FieldPanel('section_one_text', classname="full"), + FieldPanel('section_one_image', classname="full"), + ], heading="Section One"), ] diff --git a/db.sqlite3 b/db.sqlite3 index fb9be89466b647311a6bbe5636e749448b92a0b7..0957e52c5569bb8c4ddae67ec8271336a8f20812 100644 GIT binary patch delta 44074 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 bO3xbm7i ze@OnQm~A)dFSrfRdxw%Opd@&B?%X@%@SZbl(loO0c=zqQ`JbL;{YAm%;bL%rSNjG* zSb|BbVmV{PZE06d?ilV!xAJnY@^jzBt{hZB9vJS)u!{1iiu1Ti^2Ch!GOdRB(C~rW zsz&*USwC1J5aAn3gy7ve`8LLph%t`A$M}gz&aEu{8&_gwOplgzIco$Ivg|-{+2WXA z;Q%sQyJvg>I((@F=B5%bnZ7D#7ZdoSJ1#+r%+Zk{XS@cfw|-vAuG|=iPik4#V6r$l zKI01Nj?16mn!@8>Uc4xd4o@a8U(IMin@51b0bXs509MX~mD}J52ClI0?A+Vn{stdF za2Y}bv2cVdygM72|G)-4TR7At%q7$uJd-s^>no~F|ZOwr|Z}(GN=9CcHMsyFS<9C{}Z0xe?ZfJ zMR*h*T<|V^!BBiBN0EgCp>WX%(FTvPCJ`P=?;uN2_`#i*4`E9Lw+t~f7~QgklaEA< zQYU(}mU`W8^#Q&Z-5)k}fg1rj(1`-cI}oPf6P04Y&Cc(9(eY9mW!v!y34G7K$z1K$ z=m<5$BJ~Bq9)eC+x~^Q4JcMMDhopJfX|}CCqKO|9d_q7!7}GB0Ak%~A&(5DeJ3P`Z zS!P4!FRAV;Dv6F81?8f~t)_$Xqe*d!n@xR9dFrtCSDHUa+>8Ag6?~3Bq$LtqBbL~x zAhXR$cmE$h^qJ3s_ontV+aV9mm$W^KLfJS?hvJggi)JjQ{hEiXevNyl7zZl+U7`)w znK}JaTJt%2cRk2ORo3IxYK=LKP068p$2@B$mo5Ii)(@s$>8C4mj%S!_sscpWHLBkV kWKOg0M}I$lybiwW_tN(a%i1RhiIvzR?7%KL8QJdkf64QLga7~l literal 1626 zcmbW1OK;Oa5XWuDPHe|{G>@h&AR##Al6(P#dME{?(pGJ__+s4bCULvAiyxG7g=;T- z1CD$nv^T^7@f8qA%-G3xgTw_}{_D3hv$N~jN8D)G3Ot{_e4Qmg->@M+Iy83SOJ9Ky zg{VvkRaaG!HKv6Xw^DG0>7n5o1?#LD*4$db1~Ws;wL;sqi*}XOL&tSg<*7ny#QdNT zlN#?UZi85-%FzA+qbNg_xAQ2N#)Nt-$Y|oT6l~QH3##notqs8lD~ zjpiB>S0%1VY)WiNY)f31*pav)aZ}=!#BGT;B<@JurM>e$-J}CjAv!T`G@z=WT1oQ? zF^L5}jI)KeF31saurkZIrtr1|wME>9i0cS%S5QyH^+nvK@D2oRiMVZyn;Qeg?UNnY z8+W+*EDk9y{REcUIAeZv!Oa=~+3*yL&BkE;A#wgckIb*Qy)|B~a8u=mR z?X@V_I=m%Yf^hz>ep)8Fe-z;+t1YNcf@pp_Kz0=`2N2l`(^@vPtYw>A#k{*3D_bOV zHOtOlMoc4qrVPYHjn%X!*q4i5vp7$d(-FN&8zvGnEKHckS>@S>j#8T7&1yooX$sqV z8Z@n^0n6cVi<_Q@74|%CdmbFsoFO}&_d54k=}8PYUx|r=r!8rrv{5=JU6dY5A7v9| zfU%X+>|F!Jz#khyV zCKhp)JRXs=q=N0{l|Rq?fQ`yIFUznp&hSP|i-Pms%IK3Yh(^l_ zVR4Ew@&2*|qiLRIap+MJWN}ii6PDq&fF(V|;mt?o8b5~HQc0U24i*Ut)P^$kv_FgA BvvdFe diff --git a/home/migrations/0006_rename_section_one_img_homepage_intro_image_and_more.py b/home/migrations/0006_rename_section_one_img_homepage_intro_image_and_more.py new file mode 100644 index 00000000..70d0f4e7 --- /dev/null +++ b/home/migrations/0006_rename_section_one_img_homepage_intro_image_and_more.py @@ -0,0 +1,47 @@ +# Generated by Django 5.0.8 on 2024-09-16 12:36 + +import django.db.models.deletion +import modelcluster.fields +import wagtail.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('home', '0005_rename_hf4img_homepage_section_five_img_and_more'), + ('wagtailimages', '0026_delete_uploadedimage'), + ] + + operations = [ + migrations.RenameField( + model_name='homepage', + old_name='section_one_img', + new_name='intro_image', + ), + migrations.RenameField( + model_name='homepage', + old_name='section_one_text', + new_name='intro_text', + ), + migrations.RenameField( + model_name='homepage', + old_name='section_one_title', + new_name='intro_title', + ), + migrations.CreateModel( + name='HomePageSections', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('sort_order', models.IntegerField(blank=True, editable=False, null=True)), + ('section_title', wagtail.fields.RichTextField(blank=True)), + ('section_text', wagtail.fields.RichTextField(blank=True)), + ('page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='homepage_sections', to='home.homepage')), + ('section_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image')), + ], + options={ + 'ordering': ['sort_order'], + 'abstract': False, + }, + ), + ] diff --git a/home/migrations/0007_remove_homepage_section_five_img_and_more.py b/home/migrations/0007_remove_homepage_section_five_img_and_more.py new file mode 100644 index 00000000..97581017 --- /dev/null +++ b/home/migrations/0007_remove_homepage_section_five_img_and_more.py @@ -0,0 +1,61 @@ +# Generated by Django 5.0.8 on 2024-09-16 12:39 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('home', '0006_rename_section_one_img_homepage_intro_image_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='homepage', + name='section_five_img', + ), + migrations.RemoveField( + model_name='homepage', + name='section_five_text', + ), + migrations.RemoveField( + model_name='homepage', + name='section_five_title', + ), + migrations.RemoveField( + model_name='homepage', + name='section_four_img', + ), + migrations.RemoveField( + model_name='homepage', + name='section_four_text', + ), + migrations.RemoveField( + model_name='homepage', + name='section_four_title', + ), + migrations.RemoveField( + model_name='homepage', + name='section_three_img', + ), + migrations.RemoveField( + model_name='homepage', + name='section_three_text', + ), + migrations.RemoveField( + model_name='homepage', + name='section_three_title', + ), + migrations.RemoveField( + model_name='homepage', + name='section_two_img', + ), + migrations.RemoveField( + model_name='homepage', + name='section_two_text', + ), + migrations.RemoveField( + model_name='homepage', + name='section_two_title', + ), + ] diff --git a/home/migrations/0008_alter_homepagesections_id.py b/home/migrations/0008_alter_homepagesections_id.py new file mode 100644 index 00000000..9c9269a9 --- /dev/null +++ b/home/migrations/0008_alter_homepagesections_id.py @@ -0,0 +1,18 @@ +# Generated by Django 5.0.8 on 2024-09-16 13:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('home', '0007_remove_homepage_section_five_img_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='homepagesections', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + ] diff --git a/home/migrations/__pycache__/0006_rename_section_one_img_homepage_intro_image_and_more.cpython-310.pyc b/home/migrations/__pycache__/0006_rename_section_one_img_homepage_intro_image_and_more.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e399f09c3f3dcc57adb0f4484b9fab84266a2024 GIT binary patch literal 1572 zcmZuy-EZSW5VsvCv7Mw%+FqgD2Oo!!0#Xv8yNU;Nw6s?^aaWzLW{GN z+|jd*ljoRE;womMplRH3#g zwK{k!nh(KJt3d;rl!*r|y4PSG+6#B$Ku2e1EG^hrRLHW4!L%`Ll5J~YlYZ+z`Zl)6 zzlQ76_Ow3jOgG>ycpG-i+IJ}0rbf8-ZozH119unIi4)eK6WWA*?%(*| z%FAL{j#7MGjM}T~bNoJ6K@q@=J8yWSJjOD9Zj|=dw6EucbW&_fDkp-|Bjr3f?7FJS z=Xu7)0(p+08Z$vji3@g)7s{6?A|6MVsG6@(j53KuK7q_c&N2ZgDEsOt=IOceXx}*> z5xSes<5;!Iv`iLVTim85Q_X9u-iE8`R-KZll6ZO9(xzT%ClH^?QLwC<0%M(Qk&BaO zH&BMqEBlkn%{QvlD~PU|6vSQ1LwumceJwsDL3Q=acA_*?9v{hE@NrJCuBl0F5@8Hd z)w7v7P{-YEQ3bGk4za2kY;tN7F z;wtRxiu8FBiT)wV^E{jNB_GX2d{KCAzBzq5U%Tb`Dr>%M|C@uhatyA|SZ{VA^e54$ zM}A4dvz&@!yZ^W~$JV#|w_E-H(U!Aex9PrP-?N=7*Eg&F^8PUKx`Em$$mqeSXBd;c zk`eJ40jbSZ9(xm0bg`>FYfJh|;{$EbmDU&zPe&ZRBt!A@`;P`p}`$aP*t>u240IqRNF`(PTL~b*B|l7H72-mC|6se%c)M!i(b4DKUIh zDG8;paSeC&_}Z!t-goBab*kt}@Pet0wrQ9_XqkV6j&j2NvTmipr7^_cQcilS-*d+~ z?R-zZvvuY}79A2!H-xv0Rh`8LCKRqjAxtFjSmdSz#8V;OZnDxHDtZzcs3p|P0$R=R z#+bvGP^n9JRzN9Dq#D>=v@b;8!FgwXy-w^2Cs|eKjcQG*&KHi?{6KZp{k9o>&2Y&&yuOH)zEAVoq+#03rrwWumWf?nXX7t6^^7N_g=Vkect6|Q{{ z9tmH$z$+l3GTt<_vzn3Tn~~?6Z|x2bOGbA5^w;tSXY6N6?psF533+%z0T}RxSzd7~ zD#6(s1_I;oGQep4?Si&$Dyd%ZTU4RL54U=tRpbl(a}PRPSE3dkxB ztP;R$UP;VWgERn#s{_dB8^90_t~1E5CDn5%XjmDG_xmX{GW+B##>s3pd#*fMcZDh; zovu*@TqG`PX$Up8R=NdcoyT~z@40OWQ5g7m9>v?UaTZ5hnf7 zsW)YS9kzh&!eH=%)QRP3vqpcOZt*e!qt~WBC2~C!OV{D8+~1jhL=AoT^KP2fn`&$P z^bEu0+I7>Q=NsQ_ca^)}G$r9)D4oXq*KMzfGBD}3KD~$`c{rw!Ga<8^Y#_McM?CwR s-}LnhQmufMZfiGzc~8D4+!ybd?M{#Bo|wPf$?%FEAq#27k$5Qo0hx5ZOaK4? literal 0 HcmV?d00001 diff --git a/home/models.py b/home/models.py index 573288f3..25675ab1 100644 --- a/home/models.py +++ b/home/models.py @@ -2,62 +2,45 @@ from __future__ import unicode_literals from django.db import models -from wagtail.models import Page +from wagtail.models import Page, Orderable from wagtail.fields import RichTextField -from wagtail.admin.panels import FieldPanel, MultiFieldPanel +from wagtail.admin.panels import FieldPanel, MultiFieldPanel, InlinePanel +from modelcluster.models import ParentalKey from saburly.custom_editor import FULL_EDITOR class HomePage(Page): + intro_title = RichTextField(blank=True, features=FULL_EDITOR) + intro_text = RichTextField(blank=True, features=FULL_EDITOR) + intro_image = RichTextField(blank=True, features=FULL_EDITOR) - section_one_title = RichTextField(blank=True, features=FULL_EDITOR) - section_one_text = RichTextField(blank=True, features=FULL_EDITOR) - section_one_img = RichTextField(blank=True, features=FULL_EDITOR) - - section_two_title = RichTextField(blank=True, features=FULL_EDITOR) - section_two_text = RichTextField(blank=True, features=FULL_EDITOR) - section_two_img = RichTextField(blank=True, features=FULL_EDITOR) - - section_three_title = RichTextField(blank=True, features=FULL_EDITOR) - section_three_text = RichTextField(blank=True, features=FULL_EDITOR) - section_three_img = RichTextField(blank=True, features=FULL_EDITOR) - - section_four_title = RichTextField(blank=True, features=FULL_EDITOR) - section_four_text = RichTextField(blank=True, features=FULL_EDITOR) - section_four_img = RichTextField(blank=True, features=FULL_EDITOR) - - section_five_title = RichTextField(blank=True, features=FULL_EDITOR) - section_five_text = RichTextField(blank=True, features=FULL_EDITOR) - section_five_img = RichTextField(blank=True, features=FULL_EDITOR) content_panels = Page.content_panels + [ MultiFieldPanel([ - FieldPanel('section_one_title', classname="full"), - FieldPanel('section_one_text', classname="full"), - FieldPanel('section_one_img', classname="full"), - ], heading="Section One"), + FieldPanel('intro_title', classname="full"), + FieldPanel('intro_text', classname="full"), + FieldPanel('intro_image', classname="full"), + ], heading="Intro Section"), + InlinePanel('homepage_sections', heading="Sections Home", label="Sections Home"), - MultiFieldPanel([ - FieldPanel('section_two_title', classname="full"), - FieldPanel('section_two_text', classname="full"), - FieldPanel('section_two_img', classname="full"), - ], heading="Section Two"), - - MultiFieldPanel([ - FieldPanel('section_three_title', classname="full"), - FieldPanel('section_three_text', classname="full"), - FieldPanel('section_three_img', classname="full"), - ], heading="Section Three"), - - MultiFieldPanel([ - FieldPanel('section_four_title', classname="full"), - FieldPanel('section_four_text', classname="full"), - FieldPanel('section_four_img', classname="full"), - ], heading="Section Four"), - - MultiFieldPanel([ - FieldPanel('section_five_title', classname="full"), - FieldPanel('section_five_text', classname="full"), - FieldPanel('section_five_img', classname="full"), - ], heading="Section Five"), + ] + + +class HomePageSections(Orderable): + page = ParentalKey(HomePage, on_delete=models.CASCADE, related_name='homepage_sections') + + section_title = RichTextField(blank=True, features=FULL_EDITOR) + section_text = RichTextField(blank=True, features=FULL_EDITOR) + section_image = models.ForeignKey( + 'wagtailimages.Image', + null=True, + blank=True, + on_delete=models.SET_NULL, + related_name='+' + ) + + panels = [ + FieldPanel('section_title'), + FieldPanel('section_text'), + FieldPanel('section_image'), ] diff --git a/saburly/settings/__pycache__/base.cpython-310.pyc b/saburly/settings/__pycache__/base.cpython-310.pyc index 5cd8a909986f1b14f0acc7f2dbd1dc7bb9009a00..c12fb3a1aa55a7acce726cf1980712811000f563 100644 GIT binary patch delta 308 zcmcaFIYWvspO=@50R(hjr16PPtT2qZ=f;{pJP%T7c9 delta 235 zcmbOsbzhP%pO=@50SFHMdz5xVWFnsoqt-<2-ue`wOvV(!6k#wa0wzT>8Pi#!_*2B9 z1X9GK1XDPogn(E$MIuEqoheErl`)HH0e31}iqt};bjB#r6zM22s2Dp)EJ_^ClL7K1 zQe>kfQ{+@%QCWg0sT_sH93~YoiT6nQXU;f-pN;Z FTmX&)JE;Hw diff --git a/saburly/settings/base.py b/saburly/settings/base.py index c029f49c..9cd029e0 100644 --- a/saburly/settings/base.py +++ b/saburly/settings/base.py @@ -97,6 +97,8 @@ DATABASES = { } } +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + # Password validation # https://docs.djangoproject.com/en/5.1/ref/settings/#auth-password-validators diff --git a/services/__pycache__/models.cpython-310.pyc b/services/__pycache__/models.cpython-310.pyc index d079c71e53f7805fbcc00bb912b89b1fdc2780b2..fd75cf8df15f9e9860b09be2a3a162b453928e4c 100644 GIT binary patch literal 2431 zcmbVOTXWk)6qaP!y4sc-rv-*fVYrMbwYfhrOgm}HWGHE-2`_pPvUlSsUCCi3L)$l| zea*k%C9nLPedUGz1Ex^mJ8L;Hy$ypk`gG3j+12iMzCH4+-S!Rqej5F@{|l^N$yxo` zaIWAke+DpvnZn4;*fhzugq1hqhPE5R&YN*l+qP)sPVD4v?B-tV>9(fu^B@lLFb=if z679SbceL$@ZXU&vX?$fcmw68i=JDWuBksZXSpYxaA^dajL)M1h*8Up&4(r12YQN8- zU1QLDh?N=xQ$_P4o6HzbL{@Q`iV|(D91YrP-^wNjd;CsyJ>!B68p_wkPFirGy5G!2 zm8~=cTZPC9u6qZTvUk!cSKdv@F!5M$%pB~bk{4AfzUFtyz5eZu8_DLit-YJKCbXc{ zp9kj(?(zYE8?niZ*y0Ula+_JlR@_{%TiiKx8T!!c9D2-V&Esb5^WZS#ZQfz6`zFxQ z=-xM{4dyZb*y3FlfGp5;+<*<5a4qbJ^>D$S+82yCWamKInhJNh{2`n0lD4*YVyWg> zq{VIJ?(?*oOI|)&`!StXX(qB95#?};9*@jRC$_SSxe&60%_whHBw(0VT!oU0wBjr& z(wwUxD=Ills;m-R`LzT3mmPZ6d+jZXy12_HRW>WYqjSJhmK9Ugo1}6!FS$s{dZG7v z8+8-n7i%9_@?}~@Q>0_0u~#nUDObkSQRKJ{$pAKB#osTa+6}&x&l$+=sC5iHr z1bUha4m(Ve@8_wYy(WpIVOJDSC{b4&meOZq!+x|0bQjGt*9{H4pX*pMDx*foohPlm~hb^ep zI&Q=cY|<`i)`~rNK5N0Fn1DIVg_5CS=0Uw}=0m+!++hLq7^?mjmi`>0K0q+86Oi3GZ zjmYXek&KqtGTpy)-1Djb4uhXdJ&5Nh7a-o}XLbPUL)Ju68nD_(hl3<^P$Ez~fRu`^ zPDLY*o|TH_k&v(Ae88SFTI-m-iz6nBw2Zx;Ot<1MDE7~ zXXJlEu0AazvYy5Khv=YDCFL8;o1yjOK_KqI{$ok8&u4!dz5j`Q68n#gOe&(dx7t$E9Q_ZPKcg3)G5k5XFJ|~t zglytoY8wpyyU^6yrnv3FI#tpAIelVKH!ZX&j~%APbT(w;#o6oBAD-bpeX2{X0o7kN zrYz5jVSU#0%5=@7`lL=rF3O-Tv68;NYE8FH#Jt3RgJIoGXI`z>HFP*Z-z-l!%c_}N u6mzPd`b=tRNZP@(M5f#?FeAPTUz&(0=@Sqdq_e&Wy@8LY5v@nP{@Oo~x;=^j literal 2769 zcmbtW$#UC95XD9kAi+f z^%uG1oXU^nIM-ATJ}0N_-OWWqIky0X$2YHM8a>0F9%S`;)qtz^!!LV3E*Zwp*w8Nr z8u#JJ-vcm%nZiiSz%-Ft!b;z^8Uu z)RRWgAYKv8q!qMG<4c3N%zJMzkJsMW!4kBqtOo5G_o2Pa{2ilP{{WE~T~oEjX*|pr z4@F#X8HpUUasmRe`m=brzsp}2k76!Z*H%>`+fmAeYJNQyMXU+6$Ek=@PS&oaob71D zmG@LKa6AwkJlD1($OkW@Jo%<&7~BX6A@$(wLz}KFy^Naivv)`G34q@q?IkH)qRSqq(xukl8RkGFQHlNfw zVS{YVxvfR&65%r0+H+fn)D^-LWLurvPLg_x@HF8W!n1_u2+tE!!V5!9)_wKhESWw0=XZC-;N_Ou}C~(WDTK-&_aNt$dGLWtfg`V;RM1e!byZv z2&WOwAe==whj1R@0>T=?I>JSSO9+<{t{_}RxQ1{Yp^NYdf(xJ;!z?YJ;D-lzV&t-n zmJ&h*;Cn;fLXPnJ&HjFt@P3rUvcJjm7e#i^&!fRuiZ}h)YV{`vQ}5u7^kED>`F8-W z;hS{ZgqFr93L>h<9>=lFGTqi+mgD?smH%IBGFnILH>>Xa>Nl%DQN$k|a<~llaT?nI zM~57Dc#Nik}B%4i0)=aOF!bqJlF@v=9G)9jjwCiC%|-rz6;4b2FFIxm_mI`H GJK?{s+3Ils diff --git a/services/migrations/0006_servicespagesections.py b/services/migrations/0006_servicespagesections.py new file mode 100644 index 00000000..0851bf53 --- /dev/null +++ b/services/migrations/0006_servicespagesections.py @@ -0,0 +1,31 @@ +# Generated by Django 5.0.8 on 2024-09-15 18:45 + +import django.db.models.deletion +import modelcluster.fields +import wagtail.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('services', '0005_rename_carouse_image_servicespagecarousel_carousel_image_and_more'), + ] + + operations = [ + migrations.CreateModel( + name='ServicesPageSections', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('sort_order', models.IntegerField(blank=True, editable=False, null=True)), + ('section_title', wagtail.fields.RichTextField(blank=True)), + ('section_text', wagtail.fields.RichTextField(blank=True)), + ('section_image', wagtail.fields.RichTextField(blank=True)), + ('page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='sections_services', to='services.servicespage')), + ], + options={ + 'ordering': ['sort_order'], + 'abstract': False, + }, + ), + ] diff --git a/services/migrations/0007_alter_servicespagesections_section_image.py b/services/migrations/0007_alter_servicespagesections_section_image.py new file mode 100644 index 00000000..8fb046a2 --- /dev/null +++ b/services/migrations/0007_alter_servicespagesections_section_image.py @@ -0,0 +1,20 @@ +# Generated by Django 5.0.8 on 2024-09-16 12:06 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('services', '0006_servicespagesections'), + ('wagtailimages', '0026_delete_uploadedimage'), + ] + + operations = [ + migrations.AlterField( + model_name='servicespagesections', + name='section_image', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image'), + ), + ] diff --git a/services/migrations/0008_rename_section_one_text_servicespage_intro_text_and_more.py b/services/migrations/0008_rename_section_one_text_servicespage_intro_text_and_more.py new file mode 100644 index 00000000..bb6efde3 --- /dev/null +++ b/services/migrations/0008_rename_section_one_text_servicespage_intro_text_and_more.py @@ -0,0 +1,34 @@ +# Generated by Django 5.0.8 on 2024-09-16 12:14 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('services', '0007_alter_servicespagesections_section_image'), + ('wagtailimages', '0026_delete_uploadedimage'), + ] + + operations = [ + migrations.RenameField( + model_name='servicespage', + old_name='section_one_text', + new_name='intro_text', + ), + migrations.RenameField( + model_name='servicespage', + old_name='section_one_title', + new_name='intro_title', + ), + migrations.RemoveField( + model_name='servicespage', + name='section_one_img', + ), + migrations.AddField( + model_name='servicespage', + name='intro_image', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image'), + ), + ] diff --git a/services/migrations/0009_remove_servicespage_section_five_img_and_more.py b/services/migrations/0009_remove_servicespage_section_five_img_and_more.py new file mode 100644 index 00000000..fc2c8283 --- /dev/null +++ b/services/migrations/0009_remove_servicespage_section_five_img_and_more.py @@ -0,0 +1,80 @@ +# Generated by Django 5.0.8 on 2024-09-16 12:23 + +import django.db.models.deletion +import modelcluster.fields +import wagtail.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('services', '0008_rename_section_one_text_servicespage_intro_text_and_more'), + ('wagtailimages', '0026_delete_uploadedimage'), + ] + + operations = [ + migrations.RemoveField( + model_name='servicespage', + name='section_five_img', + ), + migrations.RemoveField( + model_name='servicespage', + name='section_five_text', + ), + migrations.RemoveField( + model_name='servicespage', + name='section_five_title', + ), + migrations.RemoveField( + model_name='servicespage', + name='section_four_img', + ), + migrations.RemoveField( + model_name='servicespage', + name='section_four_text', + ), + migrations.RemoveField( + model_name='servicespage', + name='section_four_title', + ), + migrations.RemoveField( + model_name='servicespage', + name='section_three_img', + ), + migrations.RemoveField( + model_name='servicespage', + name='section_three_text', + ), + migrations.RemoveField( + model_name='servicespage', + name='section_three_title', + ), + migrations.RemoveField( + model_name='servicespage', + name='section_two_img', + ), + migrations.RemoveField( + model_name='servicespage', + name='section_two_text', + ), + migrations.RemoveField( + model_name='servicespage', + name='section_two_title', + ), + migrations.CreateModel( + name='ServicesPageSubSection', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('sort_order', models.IntegerField(blank=True, editable=False, null=True)), + ('sub_section_title', wagtail.fields.RichTextField(blank=True)), + ('sub_section_text', wagtail.fields.RichTextField(blank=True)), + ('page', modelcluster.fields.ParentalKey(on_delete=django.db.models.deletion.CASCADE, related_name='subsections_services', to='services.servicespage')), + ('sub_section_image', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wagtailimages.image')), + ], + options={ + 'ordering': ['sort_order'], + 'abstract': False, + }, + ), + ] diff --git a/services/migrations/0010_remove_servicespagesubsection_sub_section_title.py b/services/migrations/0010_remove_servicespagesubsection_sub_section_title.py new file mode 100644 index 00000000..4cce73a3 --- /dev/null +++ b/services/migrations/0010_remove_servicespagesubsection_sub_section_title.py @@ -0,0 +1,17 @@ +# Generated by Django 5.0.8 on 2024-09-16 12:52 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('services', '0009_remove_servicespage_section_five_img_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='servicespagesubsection', + name='sub_section_title', + ), + ] diff --git a/services/migrations/0011_remove_servicespage_sub_section_five_and_more.py b/services/migrations/0011_remove_servicespage_sub_section_five_and_more.py new file mode 100644 index 00000000..5fe27fab --- /dev/null +++ b/services/migrations/0011_remove_servicespage_sub_section_five_and_more.py @@ -0,0 +1,61 @@ +# Generated by Django 5.0.8 on 2024-09-16 12:57 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('services', '0010_remove_servicespagesubsection_sub_section_title'), + ] + + operations = [ + migrations.RemoveField( + model_name='servicespage', + name='sub_section_five', + ), + migrations.RemoveField( + model_name='servicespage', + name='sub_section_five_img', + ), + migrations.RemoveField( + model_name='servicespage', + name='sub_section_four', + ), + migrations.RemoveField( + model_name='servicespage', + name='sub_section_four_img', + ), + migrations.RemoveField( + model_name='servicespage', + name='sub_section_one', + ), + migrations.RemoveField( + model_name='servicespage', + name='sub_section_one_img', + ), + migrations.RemoveField( + model_name='servicespage', + name='sub_section_six', + ), + migrations.RemoveField( + model_name='servicespage', + name='sub_section_six_img', + ), + migrations.RemoveField( + model_name='servicespage', + name='sub_section_three', + ), + migrations.RemoveField( + model_name='servicespage', + name='sub_section_three_img', + ), + migrations.RemoveField( + model_name='servicespage', + name='sub_section_two', + ), + migrations.RemoveField( + model_name='servicespage', + name='sub_section_two_img', + ), + ] diff --git a/services/migrations/__pycache__/0006_servicespagesections.cpython-310.pyc b/services/migrations/__pycache__/0006_servicespagesections.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..286db9ba622a31bc40485837cd861e348d773d26 GIT binary patch literal 1224 zcmZ8h&5qPK5KbI-chW!e57J7@g#)5N>YmH)X@!`b*+B>mLJX(AMDA2gNXAKeZ8y8a z6|VCJtG(|7?92Gd0r3JHH~?jLXJ&+>*sk)Is`@_LX-1=dK<(t=$Fu)=5PWdP%|^c9 zF}?Z`br3)(gIVZDHjDhoXB`@u>{h*5uZm}J7(59e0{%V#j=eH@7tIm~PlIvi6U7Lg zkD2XPMXrP?np)d#)c{JJxwV^ZM8;!!^}p1i&pKle=HV>YD|ktLNYI3!6}? zLdfDR+Tj~i^M-101=+rClt~)}sK$})%%!N$ZH!PDF_&n0y_C|9^eSCy3L|kGs!iGt zJG}DZ-{u#RVn zm?Jef^zxm!1F0fU^Ya0jzf-K7TN1pB*q%*Pjx1j z+Mu$77lO`!5%L*rM;A&_=Z$4Bx3MQp_rUfJ4^9scj{dOyW`XOw@n4{(6x(-So=smj z6;4G}sOb^vbJHxQTFjS9UQAmxr`PvtN+<8vE9ITc?RHES7s_4hgkF7@x;S7F|HeBk z++#c8mVbT@*%zL$kbmW$<8K~6?%SVMrB7f!S>4)6Tfcfhf$Z*0)|1u7sQYeZV=Y$e pyyu+BRXDG|m)xhiroEc&J9PXTMW>y76q2RgZ!2bT7*n~oqwm)}d6EDC literal 0 HcmV?d00001 diff --git a/services/migrations/__pycache__/0007_alter_servicespagesections_section_image.cpython-310.pyc b/services/migrations/__pycache__/0007_alter_servicespagesections_section_image.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4d150d7f66d727655aab97dae767cffbe3c52f69 GIT binary patch literal 827 zcmZuvOK;Oa5Z+xs;<$-~M1|B|$~8iYBM#+)sv`F7OvB@tEBtv`AfP$DWyQUf*mz9L9{!yMrGWZv|uDt#bSLq#V<2$0UFO*DU4q z6Xm-#bM}&f2mV(EK6*v)#Y+R=XKWPwq!>0G2@{uj)~GJ8tJZ{N4XE3>_1!+U zk7K&+5ealvQUM%9CQ=XmBCs_uEP4A&7q zr1DXV&BuI>t=XGQCWmsXE>wms&Rt&w8-7w*r*fT_)^4$n4<+@A9m?fG*9s7v&+Oin z!3;OKqywE_^GBcW|Ce&?9HYPlGp(vi<5x?qO~0--Rm`A4tvUo*sS=Io>XAp>S-#d5 z-`RtU95qZwLla47m(s*i5^kxH{s&TiSSoF?Rs&pM1z62#D1Y?+u*KcjS9i!Q&P}BeCcXT)kT>%WH<9X(wWd&Eg=LlTj= I#~*lq0i=BOR{#J2 literal 0 HcmV?d00001 diff --git a/services/migrations/__pycache__/0008_rename_section_one_text_servicespage_intro_text_and_more.cpython-310.pyc b/services/migrations/__pycache__/0008_rename_section_one_text_servicespage_intro_text_and_more.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d8daca0e3bd3e13c6388e24869b999875abd792e GIT binary patch literal 1063 zcmY*YO>fgc5VhBK>NrW$773}`5Em>&5^(?y2o(v+fzkslmt0m(W@_xNyKaH}!$mSf-t_E~~1Fmq! zF8wpX3UBNc{@8b&w+?vVe|Nw~FAu(X;{en^|1KQOY9cW(}GjM^WZ0w<*2j&e3ptV?OTM#x{i+pW}7L4v~k=(&BZ$lTl80DQj z%)5CHdaw=sMF2YsFZIXUuuBN{bo>1Z8Nm!IR2SJ4EB$yh8a?BQs8R8iah9Z5;ncDq zqZN2okd;Dvmq}VDnXr1L_eY~APdV|#8u@%CWC94*r@QO<^v)`gERomvrPfha)=FAA z_Na2ETD(jO)S(p6NF`n_rQMDAtQM#{O#-X**Zo9zal>zxf6 zgC)B_2NRK$=M*#-LbqkvFwH($I?Hj)>sV$d{y=A_XVskruv24yu O*WhXyTx`d^>-`7vyFq;b literal 0 HcmV?d00001 diff --git a/services/migrations/__pycache__/0009_remove_servicespage_section_five_img_and_more.cpython-310.pyc b/services/migrations/__pycache__/0009_remove_servicespage_section_five_img_and_more.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5eef1d0c5fe927cdb8364c50178ed754571e07a GIT binary patch literal 1906 zcmcIlPjlNu6qi=AE!%SbIY|jErL;iNFk^dqU-x<_~#;o~^HEL3GXn3{1 z(1&sC5!p(jkOv}SX(sClqY!5kC96KSaq$el?5SxOpreimH7N-(GT5`4ia~1&vZU)3 zx>2E>3f-*GtqR?)&~An9ROqz|y)Y?G??4CTYp_1sm^Egbvn~1&y-PpVw)fDR^50!ax9KPJK7FvL zO-Wd%w?Y$RfBGw-pDnDgGuok_Bk~Vr^HqsB!tZ3j&!Y)s^4q~+@Yv^&1_}5XOjJpH zmVz(fXMv1DZ61W+N2%bf;0G!76UG5ub>0S{2%$k2Az?iEK{?GBfizDB%;`FL1hE=fdBjwE?; z=-JW@a>4uwhd=<8?KwvP`GtQ57qW>UMnN21f^^S;k68u{^<~fVAuTKjlHJ`yN*m=8#fIClO?v zC|B(_kg#(&QVwPNKo{ec>Q8PdvHM*V?qit>x%(m&5CSh&jpdejPic1EM3d7KgmkH@ zue(W{X9BovzYg&5i6H&~i(99&APt!$bSxbWBc4XtIM^Q^>>oatts^{gQJ5-KXZZZY zKmPIMOW9&`SYD;S8Tfws^Pgw%}Ac=VY5VAAD=KU-f=RCgXmsRUuU&DR82)@RP zK<#-|XnpR>HZKpVU!MNn{DQ0BLleL39S)8`EMnUK+I3>;+5Z3LZL(!<;CsisYmzIw zspI|Q{H`8nu5GEC*Mi%J3UHOmISD34{_r&`svS}N1JS#WL3U!=%N4venznwJsAi$NfU_(2dJ z!hlGJesr~F%Y;uH+FLb4=RX!j@kv_L<`(7J+f{V{vrt>k6-AV;Wz~Yz#-cym&U35j zTc$rC`~BKdEgPg#sWyO(Y%7gE4tkR9_(b*&DSax56IKn9y(i_(s%k<~K!6>#fbC47 zvx27gyPx|$FBCT5Q`6zwdLEhGr+Baa%=0fsV_s=x^K*1xm!`{IHC@@}E?+mEZ&sTZ z#fRd53)l=M|C#H!yR#8h9MW;2bizawKgR>X1&^PS=RP{gB0qvf)z;=1ru_)Lf79%% WbwC6@IeFc~Dg7bl!u#%t!{`Nw?yX}0 literal 0 HcmV?d00001 diff --git a/services/migrations/__pycache__/0011_remove_servicespage_sub_section_five_and_more.cpython-310.pyc b/services/migrations/__pycache__/0011_remove_servicespage_sub_section_five_and_more.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7069e279519a4a74ff25738851b4aaeec3cc11f0 GIT binary patch literal 1033 zcmcIjJ(JTg5S45t=lC3QH+(cu(J&rn&bgT@8RiNGDz1RejmC-g90%Jnk{!4jTK)zM zzlTmO4g3WPVC7uql!O+|c>VV2t)$(Rh@d5@ zXi6!0L4+s#k3{%Dm)-|I^#prO;=xbUk(ipWDsq*zg{<}5Qtp_bbB>?>j0Q+b1;KEd z)6@sH9N2{g`{Z5YfrEz*K5%g0;E{tv2Ol~(a`4!}w;VjNIFHhyIKsq^&FJMOqu4Wn z2DK{Ypv~EIdOGC_D!Br_VVf)m-OV)2Z3Q?&oLb|yXiG4Wt29Th;Idc&?hsZ|K*{T@ z0>gTHXII6GD&L8foif`xWP07ijg~c-+dIU*N*C|9RY>%zV>h&2C;)SJkJ?|aeJ8iq zL&B;q;sX=#K2^?5$T_Com4G}XrLBQ&kNAX!^>k1U-gB5UO*{KC>yxG zb6<(NkMq6xC6a}#AjzsiCC@;=X=Rh>Y}TprD%tcQxw)?icJ%aL9o_1qZ4=LGfrnLa z(p)JY_roVd^a4#lJfHnx1CM%?{bua{{DW`(t{1UyMq-)OxjYfGzA!z1Q-U>mfCn?d RlXZ2UQhQeWz9a9R{} -
+
- {{ page.section_one_title|richtext }} + {{ page.intro_title|richtext }}
- {{ page.section_one_text|richtext }} + {{ page.intro_text|richtext }}
- {{ page.section_one_img|richtext }} + {{ page.intro_image|richtext }}
@@ -33,15 +33,15 @@
- {{ page.section_two_title|richtext }} + {{ page.section_one_title|richtext }}
- {{ page.section_two_text|richtext }} + {{ page.section_one_text|richtext }}
- {{ page.section_two_img|richtext }} + {{ page.section_one_image|richtext }}
diff --git a/templates/base.html b/templates/base.html index 3cdfe678..fb4b460c 100644 --- a/templates/base.html +++ b/templates/base.html @@ -25,6 +25,5 @@ {% include 'footer.html' %} - \ No newline at end of file diff --git a/templates/home/home_page.html b/templates/home/home_page.html index 3f287a66..41f19425 100644 --- a/templates/home/home_page.html +++ b/templates/home/home_page.html @@ -10,88 +10,70 @@

- {{ page.section_one_title|richtext }} + {{ page.intro_title|richtext }}

- {{ page.section_one_text|richtext }} + {{ page.intro_text|richtext }}
- {{ page.section_one_img|richtext }} + {{ page.intro_image|richtext }}
- -
-
-
-
- {{ page.section_two_img|richtext }} -
-
-
-

- {{ page.section_two_title|richtext }} -

-
- {{ page.section_two_text|richtext }} -
-
-
-
- -
-
-
-

- {{ page.section_three_title|richtext }} -

-
- {{ page.section_three_text|richtext }} -
-
-
-
- {{ page.section_three_img|richtext }} -
-
-
-
- -
-
-
-
- {{ page.section_four_img|richtext }} -
-
-
-

- {{ page.section_four_title|richtext }} -

-
- {{ page.section_four_text|richtext }} -
-
-
-
- +{% for item in page.homepage_sections.all %} + {% if item.section_image %} + {% if forloop.counter|divisibleby:2 %} +
+
+
+

+ {{ item.section_title|richtext }} +

+
+ {{ item.section_text|richtext }} +
+
+
+ {{ item.section_title }} +
+
+
+ {% else %} +
+
+
+
+
+
+ {{ item.section_title|richtext}} +
+
+ {{ item.section_text|richtext}} +
+
+
+ Intro Image +
+
+
+
+ {% endif %} + {% else %}
-
-

- {{ page.section_five_title|richtext }} -

+
+
+ {{ item.section_title|richtext }} +
- {{ page.section_five_text|richtext }} -
-
- {{ page.section_five_img|richtext }} + {{ item.section_text|richtext }}
- -{% endblock %} + {% endif %} +{% endfor %} +{% endblock content %} \ No newline at end of file diff --git a/templates/services/services_page.html b/templates/services/services_page.html index 0de8bab6..0ee3bc8a 100644 --- a/templates/services/services_page.html +++ b/templates/services/services_page.html @@ -12,170 +12,116 @@
- {{ page.section_one_title|richtext }} + {{ page.intro_title|richtext }}
- {{ page.section_one_text|richtext }} + {{ page.intro_text|richtext }}
-
- {{ page.section_one_img|richtext }} +
+ Intro Image
-
-
-
-
-
-
- {{ page.section_two_title|richtext }} -
-
- {{ page.section_two_text|richtext }} -
-
-
-
- {{ page.section_two_img|richtext }} -
-
-
-
-
- -
-
-
-
-
-
- {{ page.section_three_title|richtext }} -
-
- {{ page.section_three_text|richtext }} -
-
-
-
- {{ page.section_three_img|richtext }} -
-
-
-
-
- -
-
-
-
-
-
- {{ page.section_four_title|richtext }} -
-
- {{ page.section_four_text|richtext }} -
-
-
- {{ page.section_four_img|richtext }} -
-
-
-
-
-
-
+ {% if forloop.counter == 3 %} +
+
+ +
+
+ {% endif %} + + {% endif %} +{% endfor %} -
-
-
-
-
-
- {{ page.section_five_title|richtext }} -
-
- {{ page.section_five_text|richtext }} -
-
-
-
- {{ page.section_five_img|richtext }} -
-
-
-
-
-
-
- +
+
+ {% for item in page.subsections_services.all %}
-
{{ page.sub_section_one_img|richtext }}
-
{{ page.sub_section_one|richtext }}
+
+ +
+
{{ item.sub_section_text|richtext }}
-
- -
-
-
{{ page.sub_section_two_img|richtext }}
-
{{ page.sub_section_two|richtext }}
-
-
- -
-
-
{{ page.sub_section_three_img|richtext }}
-
{{ page.sub_section_three|richtext }}
-
-
- -
-
-
{{ page.sub_section_four_img|richtext }}
-
{{ page.sub_section_four|richtext }}
-
-
- -
-
-
{{ page.sub_section_five_img|richtext }}
-
{{ page.sub_section_five|richtext }}
-
-
- -
-
-
{{ page.sub_section_six_img|richtext }}
-
{{ page.sub_section_six|richtext }}
-
-
- -
+
+ {% endfor %}
- +
+
+
- -
-{% endblock %} +{% load static %} + + +{% endblock content%} \ No newline at end of file