From d50d058e3c0578ffb7893e047a429e8e913e152c Mon Sep 17 00:00:00 2001 From: Mohammad Adde Date: Sun, 30 Mar 2025 21:21:09 +0000 Subject: [PATCH 1/4] Finish Introduction and Django Admin --- blango/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 130 bytes blango/__pycache__/settings.cpython-36.pyc | Bin 0 -> 2498 bytes blango/__pycache__/urls.cpython-36.pyc | Bin 0 -> 904 bytes blango/__pycache__/wsgi.cpython-36.pyc | Bin 0 -> 531 bytes blango/settings.py | 16 +++++-- blog/__init__.py | 0 blog/__pycache__/__init__.cpython-36.pyc | Bin 0 -> 128 bytes blog/__pycache__/admin.cpython-36.pyc | Bin 0 -> 532 bytes blog/__pycache__/apps.cpython-36.pyc | Bin 0 -> 397 bytes blog/__pycache__/models.cpython-36.pyc | Bin 0 -> 1181 bytes blog/admin.py | 10 +++++ blog/apps.py | 6 +++ blog/migrations/0001_initial.py | 39 ++++++++++++++++++ blog/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-36.pyc | Bin 0 -> 1231 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 139 bytes blog/models.py | 23 +++++++++++ blog/tests.py | 3 ++ blog/views.py | 3 ++ db.sqlite3 | Bin 0 -> 163840 bytes 20 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 blango/__pycache__/__init__.cpython-36.pyc create mode 100644 blango/__pycache__/settings.cpython-36.pyc create mode 100644 blango/__pycache__/urls.cpython-36.pyc create mode 100644 blango/__pycache__/wsgi.cpython-36.pyc create mode 100644 blog/__init__.py create mode 100644 blog/__pycache__/__init__.cpython-36.pyc create mode 100644 blog/__pycache__/admin.cpython-36.pyc create mode 100644 blog/__pycache__/apps.cpython-36.pyc create mode 100644 blog/__pycache__/models.cpython-36.pyc create mode 100644 blog/admin.py create mode 100644 blog/apps.py create mode 100644 blog/migrations/0001_initial.py create mode 100644 blog/migrations/__init__.py create mode 100644 blog/migrations/__pycache__/0001_initial.cpython-36.pyc create mode 100644 blog/migrations/__pycache__/__init__.cpython-36.pyc create mode 100644 blog/models.py create mode 100644 blog/tests.py create mode 100644 blog/views.py create mode 100644 db.sqlite3 diff --git a/blango/__pycache__/__init__.cpython-36.pyc b/blango/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a622d3876d4fa1cb95f028259b1b7ceb751bf827 GIT binary patch literal 130 zcmXr!<>k7z@nt##5IhDEFu(|8H~?`m3y?@*2xib^^jpbL1QJFNzx4Gp@^e%5lk-zD z^YzQ~i?WLg5|dN)lX4RC((_?de0*kJW=VX!UP0w84x8Nkl+v73JCH%eK+FID&O0AR literal 0 HcmV?d00001 diff --git a/blango/__pycache__/settings.cpython-36.pyc b/blango/__pycache__/settings.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2006330215c3967296a2f15b479f4c25ffbe7c1b GIT binary patch literal 2498 zcmb7F-Ez}b5VmajCr)BQ2m}Zer8EU6SWZZ$K&L}dY&m$at&Am;Ru^bw?};KKOGZZ~ zM7O*KFVL&b^l^0CD_)^jUCDCdI$Wfdk9@p8->$yhJ=$Gd%>VhqlJeR8;e zg^OmGL;@0O0vJeI%pj>InQ))7Qfi7M3HzDpr#~n9nSMsi0;}dAtJ;?!kTd&R|Uj9(-XD?-p?CDy+lzBnuDM67a*9q{*naVFP|d zn+hj>~neNH%nxKIwUUK7T-L;_4m&u6xEkg2<($!@#sT>glc*TR!4O6hXKcbC-Y0 zKSS>tLJl04aHfsu1Kl$no5QbnVq!egB2O?p$)9-Mkp5gQgVUq@IL0J{o--&DyNrNk z&l#FMTAt)v9>aSlggYKt7H65%JqA z&hVA*Ki%3XDFL(T&kK!)bX2Ofr6#8qDpIvBX|E+&X$eiyFO;5dZ*TKG2TX@I9X~fA zDPUWUO;omPIflP7P6f?u&o#SzR2l!qtaRj^_-ix5(1qBZcQz!{U!74>LMhhjvSNS= z-9V4KvmPE+w-?rw`lVPmFaa!bs=I`bm@>UHUJfb4P4ism@6AHR!TBkFc`TdqDqaqP z%`$Loz7qXRnLe8dpd%mC-~#?fD$HKgpi_>snN6O4+POJqWXfxPJVpG-wWwc?V|!#U zv~ZC4uHJi3Y?w4UUyWu;iPcnHjtcY1({KcOi0!!4e>@9v*@g$w9U1=S6)auy0ms4f zw_@A#<_T%}269N3zdK`mPQ^DICb}XUWcP*28?jYY*=oHl2RY&JP>Xh1=}@UlE!kg< z**c|$$?LzId0KB>?Kx;H0uGzbckS2C%MAcMBsrb1v9^lyXW&eJRi&PFAAQt8K zO#^4bshPxr;(CzPG(4I$Eyxb>0JO}mn?!1Zq(g(8riC*f>Rdt{>mvy=LmYV9Q*--* zEQZAn^0HWIi;DI}{5?ol#r@7fuo#_vVl_JO+_j3H^Yy4a}xk#IM$MA7Y^a{0s=kaF}Y zDP!Ber$fC*%Hz44{7hb}{O~Nu{epckvdGJM#GqZgvB?D{ms-lQDK?p5Rv4DKg)6$! lN#^3pu+cu5WHKy!z8~ug88#d43i(Vbyz)6V8DAMT{Vy_rG%NrB literal 0 HcmV?d00001 diff --git a/blango/__pycache__/urls.cpython-36.pyc b/blango/__pycache__/urls.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0489d27d98698a54b00f6f26cc994c35fb418328 GIT binary patch literal 904 zcma)4O>fjN5KXe#ZAn}B3%+F|mKfUG3J|EGq7vf3$7L_6H}+<|#CBvmlyc?QaOBT$ z$dywiegP-O-b9L!kZLK;#2LSN@6DW@oFqSg+*ZG%AovxG)&$}g@R-N2(O?zOkVbVV zqE!^Scv4S9yo$qs#WZHoZn~R&i>h#SK&S76Y(^9Su4^JIg+9J}gU*%Q@T%3sawU`G z!NM^6Co_fMu4+MJr3kZeP}e zKFQHbN)eHWi$-a?L};UxK;ot#P17Ha@=yDGFBt@k6v9;yyPc=$qSv)mf-R6Ff;~%J zoMy>+O^kW824QrB`ac%RZkcvOa&Oc?=QUt?_IG6C@^fMe2Qtt8VRR|Wx}{uJV1lpb zq?ORj!JkWS3<4_99+%7J8QSz#F86lr+mSoN2az{2u6g@ZWEL9%9!$Tq?>HzE=8^X-LWNe)xx%gUFkk?(nHlw5{3m2XNoaV2i`! H@ObhU@0S~x literal 0 HcmV?d00001 diff --git a/blango/__pycache__/wsgi.cpython-36.pyc b/blango/__pycache__/wsgi.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1f45cb19d2caf148a66c715960cbbe5a16bb383a GIT binary patch literal 531 zcmYjN!A=`75cPTkiMEAusCxD_YP+t=4OJCL&?pGPAyk!e*_icY$&A`mS)i!IraTX!_v;yW_gmUK+|+qX~2pYdSGax^nluo>3uN()mUt7=?8?$RU~ zItKqLv|yQ=18eJr*5XP76P5{9qP*7dRl^cATZ&q(Q$~~^*>ozZN~>Hrg=RVpe7}N7 zi8U}~f?l~!Ff@T&SvFG|zAy`r%$=+30p}8Po61FF>djM*B?rUz)9-waD~DV{rSYZ& z^>-7E_ZvdmMoey{bB=D~j2u+}u__%4{Gs?qo)G)kC>Ywi5I4Z#OeC!uf+ub+eI p5_pbMAzxwr*H$72-b%lPhCHoqeD6m)+@HPBZyV^)9(_-D>3>3mr-uLl literal 0 HcmV?d00001 diff --git a/blango/settings.py b/blango/settings.py index f9209bef27..a926e011da 100644 --- a/blango/settings.py +++ b/blango/settings.py @@ -11,6 +11,7 @@ """ from pathlib import Path +import os # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent @@ -25,12 +26,19 @@ # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -ALLOWED_HOSTS = [] - +ALLOWED_HOSTS = ['*'] +X_FRAME_OPTIONS = 'ALLOW-FROM ' + os.environ.get('CODIO_HOSTNAME') + '-8000.codio.io' +CSRF_COOKIE_SAMESITE = None +CSRF_TRUSTED_ORIGINS = ['https://' + os.environ.get('CODIO_HOSTNAME') + '-8000.codio.io'] +CSRF_COOKIE_SECURE = True +SESSION_COOKIE_SECURE = True +CSRF_COOKIE_SAMESITE = 'None' +SESSION_COOKIE_SAMESITE = 'None' # Application definition INSTALLED_APPS = [ + 'blog', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', @@ -43,10 +51,10 @@ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', - 'django.middleware.csrf.CsrfViewMiddleware', + # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', - 'django.middleware.clickjacking.XFrameOptionsMiddleware', + # 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'blango.urls' diff --git a/blog/__init__.py b/blog/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/blog/__pycache__/__init__.cpython-36.pyc b/blog/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0123addfce55b21ab415df6878ac602c5181d06c GIT binary patch literal 128 zcmXr!<>mUh@nt##5IhDEFu(|8H~?`m3y?@*2xib^^jpbL1QJFNzjXC8@^e%5lk-zD z^YzQ~i?WLg5|dN)lX4RC(({2-e!6~qd}dx|NqoFsLFFwDo80`A(wtN~kTJzT%m4tH CDjt~t literal 0 HcmV?d00001 diff --git a/blog/__pycache__/admin.cpython-36.pyc b/blog/__pycache__/admin.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d8b1c6e54affad37c5fb9cfb83cb2dfbdaf66398 GIT binary patch literal 532 zcmYLFv2NTj43%X0&bc~ikSzHHcQ_ASiz1!6q(OmZ(jw@NileK1awQu@=F87y&(~<} zlppBOp$K_N8v!JrNWKS>?+*_bzaJjEzl^b8X#bx?bdHuT&;bMPS;yNX*W6g{oev(pEcx-0~Z1W{;@I8lFo7z1ub-7gwgs@@q)r zno9qkKyZ$h&d^z=I4~uEL+Q9GV5THUl$+-RVtyj6ER&zQT#jz^HrK|sCM-46w z-rU}^ctoP){=92%LT}r302kVyA%0JTS=)By&9(~|Lf7sWUk?eOQnH+5kcY@=L+Ij#HszpwImLU~lqSU@ ztqm$|(?wOz`;ED-ltvd8L|rB$7YWhGS_$D|A&A*)Ur&U1?4>?Tj!~^;uQx)HUaW@& ze)a)fOm_D0on&{WR@us6WwIyJJ=j*RR90y3gC0|6vTbeJK6ji%{yf%0#6q_3EEDd= e2iu<61%9{Z{{J#mW9qr+Vz7JZPh&lI!hZm!uw#h; literal 0 HcmV?d00001 diff --git a/blog/__pycache__/models.cpython-36.pyc b/blog/__pycache__/models.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cd5233a73e7f9b39100c9fac07352d8f3000e4b4 GIT binary patch literal 1181 zcma)5OK;Oa5Z-nCisK}ul=jLsLTV0N5i05fB+8@H5 zKZCEFdgsK6Z=6&FBqVIj?9A-W?Cv+;KJ9kBcVF+KZw6!E+0tji-hvdQB$GU0DGxX& z+enPG6|^{e$z)5KH%yv}PtEIAU?E~j8xeaEv88ju2JRiIumP{_G?ywVV7Y}V%Q%aQ zF-_fnEf`yn;xUwB0hcT=RBLKVE{$6rSn~}7TUsb<*R4?)-ASxPMK296MWV8(oQyd_ z^wCJN4JmA>Pi)GN$q$fVeF&3E!7vMzoPA-sjRilS3@3T2hT~ku`S2pw=fx}>tKn%9 zW>JnIkB0M0Y|gG~M~I@-LO4_(7-F}N9h_-%5kD9>wJSsxrb>v~69TDKLbfl&`zlQ4 zGn!KC_DEfpd$CHSrh2+Viq5p8JaVZyBn2s#`$iM_14x?Lq9vc9mVs2()CQoA6U+t9*D}iB4js2fKgGf|VxbHn9g}Besh1p<0t|=^^Wp>`4EH z1?#d4z@cghUbCKm2B9s!od+!g7+9J%)Ycs2oL|eGWfNSbu z`~xiwtQqPNlYFg`uvD@^`9C{f#$|%eYZvAIMweh;hurtmr-T1)=!W(wsY|Lys_C7# zmunSA*=u#BiNtmP#oN&<@%Ci*SnMC}?7pd;qvONT?)E6Kam7il>+TLtJ&IG+v^?;} zS~b@Q%b)|A#Ah+?1jnCMr%7B)8c+9W%MIG0eUemBlM4dF44k4$(@=wz<2)->R@VLf zFuNM%r02XMTGVD4M#aC`wSqN-L9qtq@>TBR??J#cNYBu;f|%WwQ+gDe@^lVDXW?V} kvpEXZKE3ybo=w&g)(x?V&b9k&{wki+OKn~$b~ILN6=)We=ci7Y61I`?|evzrDkE!(jw}US)szj`O$k(c_W)fQI>z zCUAf$r(g+VR_2NqZsHbR;3Jp@3r%M}m{p^wOfQI>(Cg~&$oP+~QT ztp>p8B?J&$dZ!$EWQ!q${v|u*8HebSx6y-7M#mIAr1e7^4Wq5L(`vh0jltd}C-04q zGs8{NMsFRmk6Zh#Zb!InwbuR_Njq|PwYQ2^H&!<-dicD}bcZ}+xC>vvmsZari!$TM zE%=I<`x^Vl*EG%1or?^44oAp;J(zeHi*=*ZWi3S`0S8r`7oy&z=W>I6BkNqK{Efu; zm8=)q$g~uNME{jgYk394DK#W2#OqYaGHcGLC0-j5oaR!2LGQUX4MyAasc0y^+p*La zsQ}uM+Llu^bk4AaLr#pV^+M(5tn+a67fO`plz*)h`c2*_iJnpG40~o>SkU=D%yF={ z)MX>f1_MfUrfb5~*JVm)LpBn5qtRRF;Oe%K95B@9E?= zhH0y(DMo2ZXxB=T9H;5;YoTnlr1kPLZ-}efrA0V47ow`ff&xKSvIJQ!H#N7eorf>y zzoaiu4qv3l&khcsVEjHJmj(xq+eRGQqg>mogYlz0dq^!hvV>xPE?+mDI6NSz^SqE- z&k0e{iP4d+WuBG4Q4a%Hi89m3VS!=G0bLgCJ%90Re)xEfJIA8j%(b1jYjq{JH|h_k z{+LmTS@g literal 0 HcmV?d00001 diff --git a/blog/migrations/__pycache__/__init__.cpython-36.pyc b/blog/migrations/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9e8c71e4097229bf568f2eadd82fc81ce8b192a3 GIT binary patch literal 139 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 literal 0 HcmV?d00001 From e6fdb398118e989205bca0207ac39a78d197d83f Mon Sep 17 00:00:00 2001 From: Mohammad Adde Date: Tue, 10 Jun 2025 15:20:00 +0000 Subject: [PATCH 2/4] Finish generic relationships --- blango/__pycache__/__init__.cpython-36.pyc | Bin 130 -> 130 bytes blango/__pycache__/settings.cpython-36.pyc | Bin 2498 -> 2498 bytes blango/__pycache__/urls.cpython-36.pyc | Bin 904 -> 904 bytes blog/__pycache__/__init__.cpython-36.pyc | Bin 128 -> 128 bytes blog/__pycache__/admin.cpython-36.pyc | Bin 532 -> 564 bytes blog/__pycache__/apps.cpython-36.pyc | Bin 397 -> 397 bytes blog/__pycache__/models.cpython-36.pyc | Bin 1181 -> 1780 bytes blog/admin.py | 5 +-- blog/migrations/0002_comment.py | 29 ++++++++++++++++++ .../__pycache__/0001_initial.cpython-36.pyc | Bin 1231 -> 1231 bytes .../__pycache__/0002_comment.cpython-36.pyc | Bin 0 -> 1135 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 139 -> 139 bytes blog/models.py | 13 ++++++++ db.sqlite3 | Bin 163840 -> 180224 bytes 14 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 blog/migrations/0002_comment.py create mode 100644 blog/migrations/__pycache__/0002_comment.cpython-36.pyc diff --git a/blango/__pycache__/__init__.cpython-36.pyc b/blango/__pycache__/__init__.cpython-36.pyc index a622d3876d4fa1cb95f028259b1b7ceb751bf827..f55dddfd11ee5bd82ca449070290de90e57f5f44 100644 GIT binary patch delta 16 XcmZo-Y+~dv=H=z$_VLJ=$Wa9V8kz%u delta 16 XcmZo-Y+~dv=H=zOw(({9M2;!|C8h;X diff --git a/blango/__pycache__/settings.cpython-36.pyc b/blango/__pycache__/settings.cpython-36.pyc index 2006330215c3967296a2f15b479f4c25ffbe7c1b..34dfa8a730cb3b5fcb1dcc01c539064599f18194 100644 GIT binary patch delta 17 YcmX>kd`OtXn3tD}+s7kgBgZaI04YBNjQ{`u delta 17 ZcmX>kd`OtXn3tDp{ic`c8##7y0su7X1~&iz diff --git a/blango/__pycache__/urls.cpython-36.pyc b/blango/__pycache__/urls.cpython-36.pyc index 0489d27d98698a54b00f6f26cc994c35fb418328..404fbab0e68a4a1b8c152ff37908255243ac953c 100644 GIT binary patch delta 17 YcmeBR?_lRJ=H=z$_VLKr$kD(I03aO$!2kdN delta 17 YcmeBR?_lRJ=H=zOw(({9Mvew%04(_hkpKVy diff --git a/blog/__pycache__/__init__.cpython-36.pyc b/blog/__pycache__/__init__.cpython-36.pyc index 0123addfce55b21ab415df6878ac602c5181d06c..6e687066f7d874b4fff6ff2e500bc3f2e84fc6e6 100644 GIT binary patch delta 16 XcmZo*Y+&Rt=H=z$_VLJ=$WZ|R8e9W< delta 16 XcmZo*Y+&Rt=H=!3x$$NCM2-poCS3(> diff --git a/blog/__pycache__/admin.cpython-36.pyc b/blog/__pycache__/admin.cpython-36.pyc index d8b1c6e54affad37c5fb9cfb83cb2dfbdaf66398..213eed2e0844e0297c3118063004e7837220da37 100644 GIT binary patch delta 295 zcmbQjvW2DIn3tF9vX4iG3L^uODbnG6I?ATNNtJ+ zYcPW*+e@Go44RC$SQArnGxIc=Z!w1?rr%--$S*Fr#qOM+o12<9u`iyN1Eh+nh#g23 zaZdc@&&Cg8@lW<=G>~KiGC{Z)mX~ hkadg0CO1E&G$+*#7zzxn;9s@BPumD*OKwRttBvKes7;_kM8KW2(L2RZRrd;MI z=3JI27Dk3t#w^w>wp8Y3pqx8H3Udle3quMEP?WuyIf?@+%aY2`%mmcS8qA={_7Z3! zgC^rG*2EP4+{`>prd!M*iRrgk0`iL|E|2GB2gx!Ou>q+fj>*D|{%m|8Cg0=?MgvJ! zAQL20400a_BL`y|Uy M9!3Es9ws3c0FJ^hmH+?% diff --git a/blog/__pycache__/apps.cpython-36.pyc b/blog/__pycache__/apps.cpython-36.pyc index bfd5548fd244fa2655e0b3e0bc8b42785d49a785..3f4af37443c5373972f5d2c70c991b1289befb36 100644 GIT binary patch delta 17 YcmeBW?q%jM=H=z$_VLKr$kECO03b~R#sB~S delta 17 YcmeBW?q%jM=H=!3x$$NCMvhiS04_lVxc~qF diff --git a/blog/__pycache__/models.cpython-36.pyc b/blog/__pycache__/models.cpython-36.pyc index cd5233a73e7f9b39100c9fac07352d8f3000e4b4..aa66d9c20396b1b3ccbd464517ca3c3b0a4b24fd 100644 GIT binary patch literal 1780 zcma)7%WfMt6djJ{rO`<8D^C<{+M){~fW7FpC}PM?QZ%*$TiI~Kj6_-*WgZG=l*C1M z&Zlo=m-n1Qf8Xtfe>{6SJ8>=RPiyUS;6Fku za~Nq!mRcF(jFE4rcGlvp+Ha*!=5n|8oz%;G?q>lHnDxYxuJqnp(o<~SzHIRj5nl#~ z1gl5~k+uvG30ILwcFwFp^bx;l4Vdw=LaMZc7nG{1l6*>jXISKw%B#`ELJe%Q`9$SP zCzHp8R>?H~SzVa^Ds-ySxJrtALg!t5EjW+R$_FsY;!IlHR;{@snY2GJ?#h;Q-do(0 zE^_fqYZOmEO030Chgtkiq$;0Qvk60pKI*9r(Mk{IS8HxzCp*Rl_f4EG6&$Bj>G|)L zjR|N=!)rHbMxKBh4FmC`(Y0Y$L=)=%u zN+LqQBD;?KtB}_ed5Iv#mOi+E4QYM--Y!DUbfQj*3O)8Pd5tc>qvMNMg zycMyO7zbD5WQS>be?L05aq)OhXpTO3s(oNNG(>%n6i(e()q-?qeaivB{rs{0_pcnLZFD9J?~8W1Hk7MtE+k9g;hC-BP#JolC~=%8ra6wR^G) zgnPz8$pEk3L1Ms9-$9S=E_JqXNguC_lP}X$2h9|TBKZsQ3N7WsUEc=-v3XP zR!NmYrMiRT)(TwLmP-09+LiVqO7cd0_di7>eUA1S#(#c#GCCZNxCaK#K$MJr2V0g4xj?<)^H3$=<^mj0(eU>h#4Ii8mF89l2mc{x)e?imzqd3196=WNBk!p=o z#nV!gcx&uUFllsC{14dSB034Q+-)AVS||Lo3&HnPmbF&u%NX~F{u|WqP<^pFqcyay93yXVl@5$txd(ZsNz9!jvmi6|(-;93{gnrtmWTDzX z2yw)*L=#+K?0X`~Bq#!m-XI=udVx3<_#-_JiV&EPGho;q!+7)oyTi>SnC3eqG|kD*PNr_8Z=P7Qsu^_mKPxJwH+aU)n>AQ=+I{A&>Ey{S%xn^FB{6 zP%+>cn9ex5*J=Y^N!yfQD~zy?EIrDJ3lC(~d~&pzN~uDS%CTbhnhrN&816ZDrhc0N zl!jCg!k<&GyIPjosIna9iz)?LWgccM3s&Ckz26;ey&e^;nwsNQxoopCVpLDWb}b|? zdWT8?!OO}NeMqD}s&9w%WO^WLecVlI)(bA$FX7T#7ag{Z5sh)PJ5_T!YCU#hT_TQ} zYOMdC+8ikPBlJW2fDIC&JTc58yT+cp40rsWbUGb>@A~csd;~6j0eeoRc!j+T14tqK G`RFff8-i&7 diff --git a/blog/admin.py b/blog/admin.py index 6154b74bd9..8f81e91c7d 100644 --- a/blog/admin.py +++ b/blog/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin -from blog.models import Tag, Post +from blog.models import Tag, Post, Comment admin.site.register(Tag) @@ -7,4 +7,5 @@ class PostAdmin(admin.ModelAdmin): prepopulated_fields = {"slug": ("title", )} list_display = ("slug", "published_at") -admin.site.register(Post, PostAdmin) \ No newline at end of file +admin.site.register(Post, PostAdmin) +admin.site.register(Comment) \ No newline at end of file diff --git a/blog/migrations/0002_comment.py b/blog/migrations/0002_comment.py new file mode 100644 index 0000000000..8ace1110be --- /dev/null +++ b/blog/migrations/0002_comment.py @@ -0,0 +1,29 @@ +# Generated by Django 3.2.5 on 2025-06-10 15:18 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('blog', '0001_initial'), + ] + + operations = [ + migrations.CreateModel( + name='Comment', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('content', models.TextField()), + ('object_id', models.PositiveIntegerField()), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('modified_at', models.DateTimeField(auto_now=True)), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), + ('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/blog/migrations/__pycache__/0001_initial.cpython-36.pyc b/blog/migrations/__pycache__/0001_initial.cpython-36.pyc index 701165428c69efc33446648588130d60ced1de2c..aac8d4946359740d2846f5be3865384d0264e58e 100644 GIT binary patch delta 17 YcmX@ld7hKQn3tD}+s7kgBgb(T04c}>n*aa+ delta 17 YcmX@ld7hKQn3tC;Wy{O-jU2~W05d5C`~Uy| diff --git a/blog/migrations/__pycache__/0002_comment.cpython-36.pyc b/blog/migrations/__pycache__/0002_comment.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e2e45245dd2ae6ba95925b0cd7f88f2c039c3b09 GIT binary patch literal 1135 zcmY*Y$#T;`5Y=XFma`gg4t#(wc7Pj|qGIBNq(}lqoQp0~vZkX*ku+i?Cpgz|^$^f*peNRy?pstpQ~Kr~{9fs+!Y-kz;yfz*nsBo?;z1R& zycA}}D5T|SDE;oQ4uV~L${%=u;;U5gHTnW08_-J3JC*h#%z&~@Ths(6ajAv3O&#hk zj0=snQP;jx5P68a8g&qL&}(I(qJDKLt<};xN-MCMtR+seo@~$!y1CHMtNXuRW^XK! zMV~FSNcA`AbL?|VI4Ac_2`^-M1$kA?3n<0Q?d|Q?ghR%zfh;XVnn)gGAdG3sBH^La zD-!2%6$h!X_E?r-0HMWnav-#$ao-SLFsm2|IRq6@(JpwL1$<7fU@n{zIDQx3g7B_^ zPg%JPZY}c(hfNa*D-u)TE<=!@LSCAvIlCbN#i+^tQjdlZ;Sz!s%~C+@ z5%P5wq%sI0Tt`>YEpLLN2&QPKP(V&059eHyrq$8;aMO{~(b?W;yf0i*Mdv@RDUP43PmgykY#REP@b* z(^Lk-7mJ3E|IM&os<2s;K{4koj3Z}Q_9W0X)m2TyP&KWK$W>SH?y0p`-xlqrLdo1k yGcISTq0@S@%}BN$l!N9k9o%=r`?74A^Ra;j4N)iTorbk{lBH78?5S(2t^WgWqf)s5 literal 0 HcmV?d00001 diff --git a/blog/migrations/__pycache__/__init__.cpython-36.pyc b/blog/migrations/__pycache__/__init__.cpython-36.pyc index 9e8c71e4097229bf568f2eadd82fc81ce8b192a3..f1cb76b236a926bf329dcbaf19469ea5228c6216 100644 GIT binary patch delta 16 XcmeBX>}KRJ=H=z$_VLJ=$k7Y{8?ghM delta 16 XcmeBX>}KRJ=H=!3x$$NCM2=0g1`zUiVRzem(4#rg@ z2f0XwX<}l$n0Te^u!~>65_ds zcb(P-48ydiwECtRn(Yl(W6g{~P3h2zc5n#&LMsL9*lkqh2&j9z!>mRdwVWp`2Xxf3 zB0ZygO*R8&ck{8dnB+LlABl^jqe3R@=lrc+F5vZXw6C?p*WST#jV*@*oWHG5>m0EG zo1bht0c8G7Q~homrOJ{hf}v&f3cW*5QKVqu`jFLv+nt~(uZxoTvF_ zS4u6jHXJ-aCWN$*6-r6hS~7kynn`XX87mGhAft&y39BnSIG-HXv&fq#7I-7-M(wB> zc@^nnRkcA6K(edRwHle#SXT&rdOoDD($5!(qwoT7;=2wM={FSTgV0%1f$%Vfhh^gs z)L8Ii`dZzrE&w;NADD&===;(CLZ;!%#@+S!z)x7JxUJPMR3% zC$*?Z6VwfcHDKWOZW%ck&Cr?!^t!?OT`J@8{pW#3t+}$nF>BmbTQqJhQ{w14m2=f= zPB}_eX_UGzA;t82n0_>y!!7$v1dAcbyi)nPGG_W}@>7qgTH`5VhF}$`g6Nb;o^bTJ zLGq?D3E`^tl}nnD__z?wisO+~B64`Ry{)Z1?k_)Yke6bx`^Nf|+tCai?x&gZ8iqc| zY|1hosro44IHz9EZ*#qv$*MnnBztX4(0UO3fnkmdG?(ku2jwp@*tOZj4mCS;vXy2$ zw+6ZihuaMkLN*#p3*|SJzk7m%A^vQLKFjx<4rv2Yo36>0ZdwQin(i zP|&01Eu&+w6LOe*!Z<C9*?!y?9z&oG@U zfl)?)^&*QKvpmx#CNst+hVKmd6C16!%g Date: Fri, 13 Jun 2025 12:05:04 +0000 Subject: [PATCH 3/4] Finish html frameworks --- blango/__pycache__/__init__.cpython-36.pyc | Bin 130 -> 130 bytes blango/__pycache__/settings.cpython-36.pyc | Bin 2498 -> 2515 bytes blango/__pycache__/urls.cpython-36.pyc | Bin 904 -> 979 bytes blango/__pycache__/wsgi.cpython-36.pyc | Bin 531 -> 531 bytes blango/settings.py | 2 +- blango/urls.py | 2 ++ blog/__pycache__/__init__.cpython-36.pyc | Bin 128 -> 128 bytes blog/__pycache__/admin.cpython-36.pyc | Bin 564 -> 564 bytes blog/__pycache__/apps.cpython-36.pyc | Bin 397 -> 397 bytes blog/__pycache__/models.cpython-36.pyc | Bin 1780 -> 1780 bytes blog/__pycache__/views.cpython-36.pyc | Bin 0 -> 299 bytes .../__pycache__/0001_initial.cpython-36.pyc | Bin 1231 -> 1231 bytes .../__pycache__/0002_comment.cpython-36.pyc | Bin 1135 -> 1135 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 139 -> 139 bytes blog/views.py | 2 ++ templates/blog/base.html | 17 +++++++++++++++++ templates/blog/index.html | 8 ++++++++ 17 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 blog/__pycache__/views.cpython-36.pyc create mode 100644 templates/blog/base.html create mode 100644 templates/blog/index.html diff --git a/blango/__pycache__/__init__.cpython-36.pyc b/blango/__pycache__/__init__.cpython-36.pyc index f55dddfd11ee5bd82ca449070290de90e57f5f44..47ee66281ddbe5b233da49f77e1a0e95cd32cca0 100644 GIT binary patch delta 15 WcmZo-Y+__L=H=yj*6cNry&3==CIl-0 delta 15 WcmZo-Y+__L=H=z$_VJj=UJU>i=>r!4 diff --git a/blango/__pycache__/settings.cpython-36.pyc b/blango/__pycache__/settings.cpython-36.pyc index 34dfa8a730cb3b5fcb1dcc01c539064599f18194..a7713538cc1e5d346c5caa9d0dc9fdfc36757c49 100644 GIT binary patch delta 209 zcmX>kd|6o8n3tDp>sGG}X+8#q#|%h-1ITs&;$ohO%5&>e*;AyX8PXY3SW~1^WKv{P zNzQskj>$7QH350WFH8Uc delta 205 zcmcaCd`MW?n3tD}+s7k=m5+hpF#{6d0J0r`xR`CC^4$7#h7{HmsTAoHnH1R+xpbCH z#uWKEEa{9+`}OV3v*PAw_f?8?~9 iy!keZHzOn0W_7l|Ol(>}rxj^U*5a&ZWSYE+QxgCqNiH)0 diff --git a/blango/__pycache__/urls.cpython-36.pyc b/blango/__pycache__/urls.cpython-36.pyc index 404fbab0e68a4a1b8c152ff37908255243ac953c..199610a1307f3931b1a90282013fa5e99d97ea5d 100644 GIT binary patch delta 253 zcmeBRzsz25%*)GVv%@Pxhna!lF#{4{1F{`}xYz?oq%cG=q%fv17+U&6diR#hJyG!k)s>%bd;>#ht8sxJvy_!kJuZk@(B{wrq{}#h7*37(=)Cx_;TP%5rxv82wlixBKI7D$J z<>aU9m1U-u7vEw5v2U>yXO^ViVks@kDZa%DmMCHcI`kGdP^2KSq$IT{uXrUx5g$;j Wh;OnzvppXdkjcWx1B4vRJd6On@;*`k delta 163 zcmcc2-oYMW%*)Hg?cS*%%X%}nWxQS2$K!3>&g8w;M1& diff --git a/blango/__pycache__/wsgi.cpython-36.pyc b/blango/__pycache__/wsgi.cpython-36.pyc index 1f45cb19d2caf148a66c715960cbbe5a16bb383a..955a72558eac97c6cc9a5f6d0667ec2603d0b042 100644 GIT binary patch delta 17 YcmbQtGMR+D*ylh diff --git a/blango/settings.py b/blango/settings.py index a926e011da..17376fe33f 100644 --- a/blango/settings.py +++ b/blango/settings.py @@ -62,7 +62,7 @@ TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', - 'DIRS': [], + 'DIRS': [BASE_DIR / 'templates'], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ diff --git a/blango/urls.py b/blango/urls.py index cde05802f9..0b4fcf27af 100644 --- a/blango/urls.py +++ b/blango/urls.py @@ -15,7 +15,9 @@ """ from django.contrib import admin from django.urls import path +import blog.views urlpatterns = [ path('admin/', admin.site.urls), + path('', blog.views.index, name="index"), ] diff --git a/blog/__pycache__/__init__.cpython-36.pyc b/blog/__pycache__/__init__.cpython-36.pyc index 6e687066f7d874b4fff6ff2e500bc3f2e84fc6e6..b0856a4f60ffb7b56ae2222868cadf067b597b0b 100644 GIT binary patch delta 15 WcmZo*Y+z(J=H=yj*6cNry%GQ%>;xqM delta 15 WcmZo*Y+z(J=H=z$_VJj=UI_peuLBVP diff --git a/blog/__pycache__/admin.cpython-36.pyc b/blog/__pycache__/admin.cpython-36.pyc index 213eed2e0844e0297c3118063004e7837220da37..6f80b10d60e218c22f4332f1da10c332ad33a193 100644 GIT binary patch delta 16 XcmdnOvW11+n3tF9S+mzhc3ma_Cuam{ delta 16 XcmdnOvW11+n3tF9vX93`c3ma_C5{9g diff --git a/blog/__pycache__/apps.cpython-36.pyc b/blog/__pycache__/apps.cpython-36.pyc index 3f4af37443c5373972f5d2c70c991b1289befb36..b4c5f760f8c20433d86d521b8dc3c07e4f110907 100644 GIT binary patch delta 16 XcmeBW?qy~-=H=yj*6g*By^Rq7BWeV3 delta 16 XcmeBW?qy~-=H=z$_VL)r-o^+392o;$ diff --git a/blog/__pycache__/models.cpython-36.pyc b/blog/__pycache__/models.cpython-36.pyc index aa66d9c20396b1b3ccbd464517ca3c3b0a4b24fd..ceda0e3a63dbf6560f6d8bf1c795971d19c7fd9e 100644 GIT binary patch delta 26 icmeyu`-PX+n3tF9S+iG$KPv;nk;c6$m~6 delta 26 icmeyu`-PX+n3tF9h>u5xKPv;nk;WMF-;m diff --git a/blog/__pycache__/views.cpython-36.pyc b/blog/__pycache__/views.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..89966abbb8a409dc191f4483755038e325a31de8 GIT binary patch literal 299 zcmYjMF-`+95M29m0YyYm<_kx0E@)8{iH;%--F3;Wl{@go!S)eAhz35x3;4^mRQWED#S2$ zddu3?BHmH4XTS~MC!j!YF!_)W$>r<$+SrY1A$cyF(3wKG7zm>iryqOm!xy;`UXGWl zv7J`6<<_dbbq{{Gs}F&)=H=yj*6cNry#)XsD+ERW delta 15 WcmeBX>}F&)=H=z$_VJj=-U0v@?gKIa diff --git a/blog/views.py b/blog/views.py index 91ea44a218..4a781f775d 100644 --- a/blog/views.py +++ b/blog/views.py @@ -1,3 +1,5 @@ from django.shortcuts import render # Create your views here. +def index(request): + return render(request, "blog/index.html") \ No newline at end of file diff --git a/templates/blog/base.html b/templates/blog/base.html new file mode 100644 index 0000000000..c97a299916 --- /dev/null +++ b/templates/blog/base.html @@ -0,0 +1,17 @@ + + + + + + + Hello, world! + + +
+ {% block content %} + + {% endblock %} +
+ + + \ No newline at end of file diff --git a/templates/blog/index.html b/templates/blog/index.html new file mode 100644 index 0000000000..3ec9ee3b25 --- /dev/null +++ b/templates/blog/index.html @@ -0,0 +1,8 @@ +{%extends 'blog/base.html'%} +{% block content %} +
+
Column 1
+
Column 2
+
Column 3
+
+{% endblock %} \ No newline at end of file From e3b7fb87712d3bb473fb7b48755ecb98f5d00d4a Mon Sep 17 00:00:00 2001 From: Mohammad Adde Date: Sat, 14 Jun 2025 06:51:05 +0000 Subject: [PATCH 4/4] Finish custom filters --- blango/__pycache__/__init__.cpython-36.pyc | Bin 130 -> 130 bytes blango/__pycache__/settings.cpython-36.pyc | Bin 2515 -> 2515 bytes blango/__pycache__/urls.cpython-36.pyc | Bin 979 -> 979 bytes blango/__pycache__/wsgi.cpython-36.pyc | Bin 531 -> 531 bytes blog/__pycache__/__init__.cpython-36.pyc | Bin 128 -> 128 bytes blog/__pycache__/admin.cpython-36.pyc | Bin 564 -> 564 bytes blog/__pycache__/apps.cpython-36.pyc | Bin 397 -> 397 bytes blog/__pycache__/models.cpython-36.pyc | Bin 1780 -> 1780 bytes blog/__pycache__/views.cpython-36.pyc | Bin 299 -> 475 bytes .../__pycache__/0001_initial.cpython-36.pyc | Bin 1231 -> 1231 bytes .../__pycache__/0002_comment.cpython-36.pyc | Bin 1135 -> 1135 bytes .../__pycache__/__init__.cpython-36.pyc | Bin 139 -> 139 bytes {templates => blog/templates}/blog/base.html | 6 ++-- blog/templates/blog/index.html | 18 +++++++++++ blog/templatetags/__init__.py | 0 .../__pycache__/__init__.cpython-36.pyc | Bin 0 -> 141 bytes .../__pycache__/blog_extras.cpython-36.pyc | Bin 0 -> 754 bytes blog/templatetags/blog_extras.py | 29 ++++++++++++++++++ blog/views.py | 5 ++- db.sqlite3 | Bin 180224 -> 180224 bytes templates/blog/index.html | 8 ----- 21 files changed, 53 insertions(+), 13 deletions(-) rename {templates => blog/templates}/blog/base.html (85%) create mode 100644 blog/templates/blog/index.html create mode 100644 blog/templatetags/__init__.py create mode 100644 blog/templatetags/__pycache__/__init__.cpython-36.pyc create mode 100644 blog/templatetags/__pycache__/blog_extras.cpython-36.pyc create mode 100644 blog/templatetags/blog_extras.py delete mode 100644 templates/blog/index.html diff --git a/blango/__pycache__/__init__.cpython-36.pyc b/blango/__pycache__/__init__.cpython-36.pyc index 47ee66281ddbe5b233da49f77e1a0e95cd32cca0..d76684da40bf6a712dfe7f3fa7fe561dda4a2767 100644 GIT binary patch delta 15 WcmZo-Y+__L=H=yTj`5kuUJU>m83UsL delta 15 WcmZo-Y+__L=H=yj*6cNry&3==CIl-0 diff --git a/blango/__pycache__/settings.cpython-36.pyc b/blango/__pycache__/settings.cpython-36.pyc index a7713538cc1e5d346c5caa9d0dc9fdfc36757c49..01cda1d297c99609501f1d2f2d6d80711659bb49 100644 GIT binary patch delta 16 XcmcaCd|8;?n3tEUImTxr`x#CEDqRHQ delta 16 XcmcaCd|8;?n3tDp>sGIg>}NOuEyo3H diff --git a/blango/__pycache__/urls.cpython-36.pyc b/blango/__pycache__/urls.cpython-36.pyc index 199610a1307f3931b1a90282013fa5e99d97ea5d..d6397eb8fadb86117b59a6c14cea0d1ee5b4d0ac 100644 GIT binary patch delta 16 Xcmcc2ewm%!n3tEUImTxr`x#~cDF+0_ delta 16 Xcmcc2ewm%!n3tE!W{1~C_A|@?DKrGw diff --git a/blango/__pycache__/wsgi.cpython-36.pyc b/blango/__pycache__/wsgi.cpython-36.pyc index 955a72558eac97c6cc9a5f6d0667ec2603d0b042..7be50cd137e3a311753af46e579c6b1df6775115 100644 GIT binary patch delta 16 XcmbQtGMR;xqM diff --git a/blog/__pycache__/admin.cpython-36.pyc b/blog/__pycache__/admin.cpython-36.pyc index 6f80b10d60e218c22f4332f1da10c332ad33a193..abbc5a7381944204042a3928be9ba4fbd7a2e9d6 100644 GIT binary patch delta 16 XcmdnOvW11+n3tEUImTxryDk#|Bhmxm delta 16 XcmdnOvW11+n3tF9S+mzhc3ma_Cuam{ diff --git a/blog/__pycache__/apps.cpython-36.pyc b/blog/__pycache__/apps.cpython-36.pyc index b4c5f760f8c20433d86d521b8dc3c07e4f110907..1cff8bc06efd217a6d8e1279a5d0bbc766e7d08f 100644 GIT binary patch delta 16 XcmeBW?qy~-=H=yTj`7*Z-o^+3AJqft delta 16 XcmeBW?qy~-=H=yj*6g*By^Rq7BWeV3 diff --git a/blog/__pycache__/models.cpython-36.pyc b/blog/__pycache__/models.cpython-36.pyc index ceda0e3a63dbf6560f6d8bf1c795971d19c7fd9e..16d63c9c2e44149628bf3499e533e1a6160a856f 100644 GIT binary patch delta 26 hcmeyu`-PX+n3tEUImRc$pOt~(@ni!g(Tz%%*Z^uU2etqJ delta 26 icmeyu`-PX+n3tF9S+iG$KPv;nk;c6$m~6 diff --git a/blog/__pycache__/views.cpython-36.pyc b/blog/__pycache__/views.cpython-36.pyc index 89966abbb8a409dc191f4483755038e325a31de8..4b0040b797b94bcbbd205ded97eff2bec085ddcd 100644 GIT binary patch literal 475 zcmYk2y-ve05XXISKB|7Gz$37QAwgnA2#FO{NNicECN_6 zsC^c^kt}54J&B`l>>@FAq2>+a8kK*ijKw;zqUKxG@B)$ja;N~~2E&|UvZR8_v$XQ} z2!4lGu)z+ojP5|do+7}X#gHAZ+FS}#ayDPs`CMAQo#s+4Q-RFqq_nl{f)!#-9BPWj zU8M4g7uIy)gTUun`|gxBYNOp0vDZbKKegOg?I!vldWhxcEG<>d(?T(!(v8xOX0<4I zn#)DAR9FzX7JOrp)k_!j@DSUKGbeBYdW>}zN7)gpTt{L`rESq#(^IpNb4Y5%xHNxr jj{hIFR^XBI={@>s4$=rOy1^xOwvu1D|1=If2Hf-)E^%_( literal 299 zcmYjMF-`+95M29m0YyYm<_kx0E@)8{iH;%--F3;Wl{@go!S)eAhz35x3;4^mRQWED#S2$ zddu3?BHmH4XTS~MC!j!YF!_)W$>r<$+SrY1A$cyF(3wKG7zm>iryqOm!xy;`UXGWl zv7J`6<<_dbbq{{Gs}F&)=H=yTj`5ku-U0v{9s|Ar delta 15 WcmeBX>}F&)=H=yj*6cNry#)XsD+ERW diff --git a/templates/blog/base.html b/blog/templates/blog/base.html similarity index 85% rename from templates/blog/base.html rename to blog/templates/blog/base.html index c97a299916..2c6ed3737f 100644 --- a/templates/blog/base.html +++ b/blog/templates/blog/base.html @@ -7,11 +7,9 @@ Hello, world! -
- {% block content %} + {% block content %} - {% endblock %} -
+ {% endblock %} \ No newline at end of file diff --git a/blog/templates/blog/index.html b/blog/templates/blog/index.html new file mode 100644 index 0000000000..ab17acb541 --- /dev/null +++ b/blog/templates/blog/index.html @@ -0,0 +1,18 @@ +{%extends 'blog/base.html'%} +{% load blog_extras %} +{% block content %} +

Blog Posts

+ {% for post in posts %} +
+
+

{{post.title}}

+ By {{post.author|author_details:request.user}} on {{post.published_at|date:'M, d, Y'}} +

{{post.summary}}

+

+ ({{post.content|wordcount}} words) + Read More +

+
+
+ {% endfor %} +{% endblock %} \ No newline at end of file diff --git a/blog/templatetags/__init__.py b/blog/templatetags/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/blog/templatetags/__pycache__/__init__.cpython-36.pyc b/blog/templatetags/__pycache__/__init__.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7e12f776d72372bbe26f01f129d0a15267dcc1ec GIT binary patch literal 141 zcmXr!<>his@yTESg2x~N1{i@12OutH0TL+;!3>&=ek&P@K*9*(mz91-er~FMa(+r? zzJ7UrQFd`bVsff}QchxCdOncKPuDL=%`M1DEJ-a%OfS}tkI&4@EQycTE2zB1VUwGm OQks)$2Qsr5h#3H)Wg8nu5aypG#&rUu%}``0vIRx~Yv@)uMuB#0vjknV7_>;+a`a=66yiA2q^^Ae zqYuzm;@YW8A0ShYasq_JefRM|9`8Hy!}0Op{o8M=e*~dF=*6JGKY^Jq01`=@qXH)w zdropv(1iA!=Bx;k03$`$VTY1PMQbjZ41Qu6O7;VFI60Eh4I1&kkO_^jW8aO^;JH=B zCKpx#f3>J|A?$2ri`<=v+O8@+lgf%LH~vT|3Y9{Q{RjZPeFigI0E-%AaYxLF#5cej zd`t8@OC;&~^_uEwgVwA^x<``w)gJw#Eh#zhV2@e?KGbtK#XRdsOMwR+Zdu7CZYdap zNZ8PZG^}HwDY|xO_hw?OuFB=KP?PwHKH`hr*+g8dv|3zU79hh`A0OJw>5ffeG2Mj^ zt)HXF4KkCJ#)>jk+6&YSzzr6eHg@J^yQ5q@Q(i;s`e2}Z(ox{TL$i`$T5GLJJM&v~ z=#zvSxINpt(9{d?zmYzL@Z(jystOgSmCUO6uF|(=BT^O5b5SlUaMdz?ei~Rq`%=e6B~@;E ztu8!l(Ehi%)2H3Fg-0LzpK$0!^fjAnq3<2nYMB|Uv|_s=|#PO*FG1Yz%_NQ PrWjVnmpg>YhLn^4@aM|& literal 0 HcmV?d00001 diff --git a/blog/templatetags/blog_extras.py b/blog/templatetags/blog_extras.py new file mode 100644 index 0000000000..a239c1c5db --- /dev/null +++ b/blog/templatetags/blog_extras.py @@ -0,0 +1,29 @@ +from django.contrib.auth.models import User +from django import template +from django.utils.html import format_html + + +register = template.Library() + +@register.filter(name = "author_details") +def author_details(author, current_user): + if not isinstance(author, User): + # return empty string as safe default + return "" + + if author == current_user: + return format_html("me") + + if author.first_name and author.last_name: + name = f"{author.first_name} {author.last_name}" + else: + name = f"{author.username}" + + if author.email: + prefix = format_html("", author.email) + suffix = format_html("") + else: + prefix = "" + suffix = "" + + return format_html('{}{}{}', prefix, name, suffix) \ No newline at end of file diff --git a/blog/views.py b/blog/views.py index 4a781f775d..0fb6fe871f 100644 --- a/blog/views.py +++ b/blog/views.py @@ -1,5 +1,8 @@ from django.shortcuts import render +from blog.models import Post +from django.utils import timezone # Create your views here. def index(request): - return render(request, "blog/index.html") \ No newline at end of file + posts = Post.objects.filter(published_at__lte=timezone.now()) + return render(request, "blog/index.html", {"posts": posts}) \ No newline at end of file diff --git a/db.sqlite3 b/db.sqlite3 index 169bbf5fc19117fa3b5613b9936152ef5ca757a1..fb3d67955e9204e90738149f34841539af090663 100644 GIT binary patch delta 2617 zcmbVOU2NOd6(%obTeL*oW~ zQIh2ag{*aNdzoVt-Z~%{hP@3#AsCo348;O;d)WGr6(~?NX*!XU7$F{9^4{}(yx%$Z9IdZ=*4I7XI*C8M@mK_Zy8XiU`;R9v5)NbV12_zS3hVHj z@EZIPyb06o))}}te6G(=!B;Q}>s()g#FKcsU@k3`O{=<4)s`%xaH(>tR4)ts%_a*B5Y;d|x@etS@p4R#xK#aexyUbPZJUsk!v%3_CJ^QLao2m6d6J za(Qt;Ta1OI%G?D(iE6Ve$#^|q$TsGlH{}GM8J}Je5+lpJIB5*ZYq23!*A4sD(EW_j z(2C`P5zLs!iyXrV0Y(h4Jk82sP6&q-d);Q-JahSi9%rpue5E{7$)&~;iX}}JQ^G)W zR!s@H>O?9l%G2d^a&WX!9LzWKgNJ}1M}VTZg@A^t(UybultFv*h{nO zYGEav7PB>7t_ey_V=IM~8n?)mluCv(^Vy}KG1*AvM@Oetb82G7Scq_0b?Mn?vc}I_ zV=*fhOXibI)ZnAWxL#$8Xoz^YbE~$bT)Nm{WlXsT!{} zExF3iU7Vc?M5l}Sc~&SDjPs>TJv0@q&kL2tYBDr6ro{8{(ea7MY9f;zpJvjQoKZ^= zbFDTu7D=qC7X)>AwjmW|ULDoXOX|W1H#Hs$v$ceh356HyIUzDz9$A}6j+e#NC|B3S z$cnTqHAHD7IXI)R5w)Qv)(VN4WJg*~vLh#;9~V@Z5W_MUhM#G-PUG9RuARjxxPt+B z6@%}>tMDok`Wx`c0V0O~FAWKl!e=&Gr?=mI^{an7MZs+hz75}mKZ8Gk|3Zi9J@^m! zSNL1_2K)uwMyMOm>>_a7P1)Avb*#sE)9YB$dE<6$k8OLpo%dbN*yW4~#{w6DlRdqN zo`Tmg_zAoR@4&ynKOwUB;XCjxcmw_lkzPln*Wgnwg2XA?cx~gcO|NZ8+qiAhW1DW< zZ2tK-$4^n7T@3yl79j2Wo$qCz;TxoWNoBl$_kPbi?%8d(u6vp~MPe!(p2JDJBQhJJ z88OVuVMYu}iYSR3r|NaBlrePr*}PU-GQ+e=&lvTbv3lu>Ka)kT4Ba25ulN^pMnSjG z@RDCemBXy~FTeQWWj9E9ZI(Xc2uqWd!b~X0${|J;5shwqKH_Lm%N1yJsw;+NIlwM3 zuAZIo*3XBC!mwh-}8xbLM@473W*anq{q;6@4GH*lU9(KBdWC$w0D*L6H|2 zN#5GHfuC(Y$mVtOsKgyO4oNJ?vLgL|5;qTN{DRxjc)$GfCLKiO+t!UE+IDEkeo5gm~W0hXDfR`cB~n{%yJ!z}GRj3txvnK!^7` z5OrzwWdA8bJve4ZYZV9RSt*TKD zJ}4ajfOz&lCIIhX@SpGwipn40SGs`KK>XngnxFo zoy~%+o5SD<54?+fKEhCk`3U*^9-g#&fgPDH%r4+y5Ai} delta 644 zcmZ{fO-vI}6oucLnPOl6t`k#1v7wTJ8iCGqS}G)_5`UU#Qf;uJO-yNRX@TlAbg1m? ztleO`7^8^`SFR+JS#;q-Ox%OURofN2h8W!t5@>>NsAybxleanVyXT%$t=g+q`)WTP zd2!|{9?@st4)nc41R@C95P=U+f#>iF-a`Qrx;g~4h~GWP@W5UmnWCIemE^LLQquXd z!^IB#m1-5gZ`k3WQhHe_q?XIMCHRJV5VAX2PZy(0y%tu&nqI^wP7;KWo4$X?X#4wx z9t<%AFgpGl(R?$E&D0oL2wDbT`U*yC?fg$G13L)z zVTbOwfmX!W%5W?u$83~lOzX~}`8H_lA2G)>EK7*<@UMvAGZb}o7V5#Kd7wsn99X*_zswBH6d!7MtJT}VI4%ccbe9|E7Qo(8A-0Nc>iloY2!v@s9k z)q);|XT`vTmhmvJZC!p3!5+2x0X*U`hX^rKVrU>}&`z76H6qNpZqE)){u@Qe4BbWd YY1<>2 -
Column 1
-
Column 2
-
Column 3
- -{% endblock %} \ No newline at end of file