From ed71c1d04e96dcb2db5583d80141e16e5fa148e0 Mon Sep 17 00:00:00 2001 From: Alnagdi Mohsen <209276428+Adam-Alhakam@users.noreply.github.com> Date: Thu, 23 Oct 2025 21:56:08 +0000 Subject: [PATCH] Added product model, templates, and views --- config/__init__.py | 0 config/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 138 bytes config/__pycache__/settings.cpython-312.pyc | Bin 0 -> 2491 bytes config/__pycache__/urls.cpython-312.pyc | Bin 0 -> 1082 bytes config/__pycache__/wsgi.cpython-312.pyc | Bin 0 -> 624 bytes config/asgi.py | 16 +++ config/settings.py | 126 ++++++++++++++++++ config/urls.py | 26 ++++ config/wsgi.py | 16 +++ db.sqlite3 | Bin 0 -> 135168 bytes manage.py | 22 +++ products/__init__.py | 0 products/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 140 bytes products/__pycache__/admin.cpython-312.pyc | Bin 0 -> 646 bytes products/__pycache__/apps.cpython-312.pyc | Bin 0 -> 450 bytes products/__pycache__/models.cpython-312.pyc | Bin 0 -> 1041 bytes products/__pycache__/urls.cpython-312.pyc | Bin 0 -> 429 bytes products/__pycache__/views.cpython-312.pyc | Bin 0 -> 728 bytes products/admin.py | 9 ++ products/apps.py | 6 + products/migrations/0001_initial.py | 32 +++++ products/migrations/__init__.py | 0 .../__pycache__/0001_initial.cpython-312.pyc | Bin 0 -> 1292 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 151 bytes products/models.py | 14 ++ products/templates/base.html | 20 +++ products/templates/home.html | 5 + products/templates/products/list.html | 14 ++ products/tests.py | 3 + products/urls.py | 7 + products/views.py | 11 ++ trydjango/__pycache__/urls.cpython-312.pyc | Bin 0 -> 322 bytes trydjango/__pycache__/views.cpython-312.pyc | Bin 0 -> 358 bytes trydjango/config/__init__.py | 0 trydjango/config/asgi.py | 16 +++ trydjango/config/settings.py | 122 +++++++++++++++++ trydjango/config/urls.py | 23 ++++ trydjango/config/wsgi.py | 16 +++ trydjango/db.sqlite3 | Bin 0 -> 131072 bytes trydjango/manage.py | 22 +++ trydjango/urls.py | 8 ++ trydjango/views.py | 4 + urls.py | 0 43 files changed, 538 insertions(+) create mode 100644 config/__init__.py create mode 100644 config/__pycache__/__init__.cpython-312.pyc create mode 100644 config/__pycache__/settings.cpython-312.pyc create mode 100644 config/__pycache__/urls.cpython-312.pyc create mode 100644 config/__pycache__/wsgi.cpython-312.pyc create mode 100644 config/asgi.py create mode 100644 config/settings.py create mode 100644 config/urls.py create mode 100644 config/wsgi.py create mode 100644 db.sqlite3 create mode 100755 manage.py create mode 100644 products/__init__.py create mode 100644 products/__pycache__/__init__.cpython-312.pyc create mode 100644 products/__pycache__/admin.cpython-312.pyc create mode 100644 products/__pycache__/apps.cpython-312.pyc create mode 100644 products/__pycache__/models.cpython-312.pyc create mode 100644 products/__pycache__/urls.cpython-312.pyc create mode 100644 products/__pycache__/views.cpython-312.pyc create mode 100644 products/admin.py create mode 100644 products/apps.py create mode 100644 products/migrations/0001_initial.py create mode 100644 products/migrations/__init__.py create mode 100644 products/migrations/__pycache__/0001_initial.cpython-312.pyc create mode 100644 products/migrations/__pycache__/__init__.cpython-312.pyc create mode 100644 products/models.py create mode 100644 products/templates/base.html create mode 100644 products/templates/home.html create mode 100644 products/templates/products/list.html create mode 100644 products/tests.py create mode 100644 products/urls.py create mode 100644 products/views.py create mode 100644 trydjango/__pycache__/urls.cpython-312.pyc create mode 100644 trydjango/__pycache__/views.cpython-312.pyc create mode 100644 trydjango/config/__init__.py create mode 100644 trydjango/config/asgi.py create mode 100644 trydjango/config/settings.py create mode 100644 trydjango/config/urls.py create mode 100644 trydjango/config/wsgi.py create mode 100644 trydjango/db.sqlite3 create mode 100755 trydjango/manage.py create mode 100644 trydjango/urls.py create mode 100644 trydjango/views.py create mode 100644 urls.py diff --git a/config/__init__.py b/config/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/config/__pycache__/__init__.cpython-312.pyc b/config/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1ca24b88fc9488072f6b4a73f9ba8075efa6016b GIT binary patch literal 138 zcmX@j%ge<81P-@ZpPZkUmYJ>}AD@|*SrQ+wS5Wzj!zMRBr8Fniu80+=lM#rEL5z>g LjEsy$%s>_Z6geOA literal 0 HcmV?d00001 diff --git a/config/__pycache__/settings.cpython-312.pyc b/config/__pycache__/settings.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bdcb8863a4dabaa4ca0e89f0c36a36e789fd19dd GIT binary patch literal 2491 zcmb7Gy>Ht_6esolZCO!b=c{0l#EFucg5xAki!?1Q(T)&VQbj3lxe&DOB-7!C!lUAt zllCs%+96Z6BL6~{&Rt@3h{4G~rve@11YI)qk& zKED|sH-Ak~)SvF;@DmyhKKu=XpD09$6rzz&r8S@EqbVPSec1no9(rv>4`IjeH>2T} z7vp%{9i6r&hLB$jqktIcP-3)0q2Oy;jKMnu?>GvJ2?Q1tK&~zJnpS8Oe--G^ViG09 z6iT8L4xuSKPEjcR%BRrc6q-gE@R~+vyl2*Xo>k~hKun`^;xw8OGZ60#{Abaucov-( z&+S~uU6gObwqnICS??GO!Iq`y9m2E?lW7@xTj?-e)7Zi-i;cxrv5rmI!id?}VQwG~ zGA|=d(HUaNrZw`s!So1_FeA=;>>YLq&?`Wx875{F9oRM5QVgAeKWkHgc#4WYhwwPI zX<1$JWj>FL7GZ}m4l`&OS|00pAk14vS80*_VZQkxy|sy%c289qRUsB*w2${A>j(m2 z#bjQ{Y7dkD6U)Tyu|R*hN1CIZKuxwb?d6dQicWB=XX1I;?kvu4%q{72cdX~Rmm9d< zTeyDh!M&?DACMNgzx2|+^TqwU*L(Adz4+C&MRVb1BNwr=LmCz&w@hV&^+dJLOs@7I z;>C$Y7lL)m+Ua6q&rBEzCInawmhp@oR?87QEMgxDvC? z7U1zz!P{f5OB1=spy+rW9LzyXrR7!U7;thEhx(0!*M^#oq3)lu2~}x5+mc()phMX2 zR!mvL)vntLWDFM{wjSFvRbuByBo@}XDs&&a0cfnF!|q^ZrV9x*nTtMtL=_st+?SgXNu{dFb+j38}j*1s;9E(DptBQpe z?HDYM#yOu8;w!7A3hx9e+!}8tp@r?o6M1{J(3J_G3BLJMf=W-rrqVje5XAa? zk2wBjqhN>OGKUt(+m}bQprmFXtP*xv=|GDZD+*RoB{$=QB?<0nNpiwnxD8ch!}No+ zPDGO28^m2VF)`E^*a>yvp3p5Pvdjs*d(ciy;0txWAwA*0cY;NJxw+~jxpKL>&KIS} zRiPm`sZvE~z!EG#bqG#utyC6R-yiqWv;T?B|Rfu z8JaL(^qRDYH6uSP>!Ys}w!8B&@(={>srZq36Oiuj3<5tpsDYoR=>uPk4*WAq(dQ3B zR3iOj#pi5{*&k?(I?;a}Kol7jSesLI3~& literal 0 HcmV?d00001 diff --git a/config/__pycache__/urls.cpython-312.pyc b/config/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c5f10c4ba4f4def8e3ea232d56572ac32e07399a GIT binary patch literal 1082 zcmb7DF>ll`6n1h+@0xNHF)6SE2e0MqGII?||R%Ku- zTRZhPp#BubPGn(VVrx~gbmG}b)DsdCct~Dep1=2fpP#>WyAFbNwtqQ#-a_by`e;_W z4lec~I7SKTqr^ze%%Eo9G*sNmTGZ-W)b85`G7+&7iYHvoY$PH>t77_DH7j6{N9K}g_WSR*M55%_+> zV&Ns@C?B$>UCgLYa(~5J_9ZLQSoo^ghxWpEo_>fZV2QxlnB=i$tlMhP2OfT$Bsj`( zN(;tifboDcis^0`6-Aw_XzKdqx?U+z0;UwgRuDT{?DdvvT_Z-x63!z^9`;n+bDbwy zB*gt~5SC1#{*48bBf=FCPcv@lJOix%VWaB3NQ4Sx(fxzbW*%pgB+Z9lg6^lJsRM5O z+0@2hpaRFEYRRID2ep+!Wmk0^o-({4S=TOUQ~sIlcE*N27}#{`sf5Puxvuk54W?_9 zc9hUGcg@mLj+gDadT&PO{SxhUVKkCSEQQ|t(w!~aVF;5GhUN8|ENGNG-R5xPP&qfH zfLoB^wn|$fm87(ku5xbbtiPZO_>C?X{2j*Mi6V-L@YnTBt`o}q>VoJ2^orff&ME~q z8F|ESz%F&Y#40?_T83eqoAZYC>kcw*e@6@FGsvDjxOKR492^D5Ye#FR*4=Mb=iuh& Ww};_rcj45!cV@Td%};Y&UFP3zc|o86 literal 0 HcmV?d00001 diff --git a/config/__pycache__/wsgi.cpython-312.pyc b/config/__pycache__/wsgi.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9b917300cf3ffa9dad6c5a8f161ff9c5eae91e22 GIT binary patch literal 624 zcmYjP!EO^V5VdzhQ*CHKi1utDI7EVVLE?fCQcy}11nD6~NV#m>^<=ZbYp>RBLVD`~ z@dZfoi0)ez#K!^i3P)_uOH``S^2hSUiXWpBUKWuDx$Xff`zsVbn(9a^Mtab*L z`xd-I91Ri2+!1()t#^f!xI-5sz|-}r*Mq<+2!h;EI=@=#@Ix!#FS=%~<;m+H zXK|)v?%6^PV|E}+-nc;c9xV$&r?==_Wv_I~LeR9cnyCYcq9yH0yPqyj*B_P}eUvqA zmHi}0Z`aWk{|(Epxu5c&?5Pe7A^82O;PlLwkg`AMN*)T6fOE;+X6|77VQ>j z1N7d@JDlN=k`>3^6|6sZeL45exo6J#-N($FJ0o7be8FrO;q^+bq&LC|X;hMB>7{U3 zlB5XzH%tFnpBLzcVrA&J?AYFJGa{YZ{MkV!O#YY2gxX)*iK83@KmY_l00ck)1V8`; zKmY_l00cnb@e`Pu2vDUHBS$3i$K(s7KxTt~9sIfA%Yh#Rz8bg_Nc!LNzw7@A|JcYk zM&22Djf&v|0w4eaAOHd&00JNY0#7S}#KfRnz# zC9~~JUk#~LMopX{RKrC}LrmDRQL8koyD}r0Of1FE2C0(kLP;#^bf~EB(w{^!wzTwW zfGWCbDOz$WVt97LC7#Zt)93wE&zqK>jL@^G7fs5iQmbovp`aPHTBW9yXnX4$M!heh zn3`1+%Oh0Ts--Ng)r{Lsvu0@dO1WW_8;yHaqps2JqV`jfN@o%=_2mOp#d%9b%IOye zRIF^6Wv$#S_U&q^l$u^zddWw1SZy6kI(2l|RH}`>j-=vhM$McVrW&lajwPHLjFN5^ zAJXNLscbBnIp?KHtj-&=Ih4`!K*R8TxmbN ziBuwyiLDL}N+D`fp=6e+iiAda(w3>+qUJ-%ipY+`TmWah$myIlE8%GnU~q!y(1tU=ac(s7!@;j)xCC6Ux*q&)Sb-42&tEqdp!IupWqD&;L)4d|e`cPkxj9 z49Stx#2@^J;BN)L5Ud5)f~SJxfqxJDMc~VUcLLV}$Nc~8|Cawt{s;b_@_)pCaO8Wm zB0eAh0w4eaAOHd&00JNY0v`f_$n>Bj&nR2Yq z!t7b|Mfx6y9DiX@nCB7~CU#Yz?|`rh!cJEOVXL!3l)nEV&!+~N!7gcLv{Q7NzThFx zJg;!e*==9PWR?ljmp5p8D8f{0zp#-@&^I%fgs{z$5Js`=VfxC2d~{A>##pR%i z`Wl5i8};y`^V`hM;dw4X-;AJr&?AoDkq`#7W$3F9Oh#DHkr5{F{4{;FfqLm-Hgp7- z5j=B(zP2FGCkD6`_T6pA6uao8mr5>X282EK4kjy%vI|er_Yat~u*}}Uq=k8Q;dAsI z13H!ln2mNR6J>_lCCBLt1it6v+*s?byJIRX2=f;cPSAG*eDf(`s8dduX-m>~1E{1h z(kUrS>_|rFO98&QMP{H=jG5PwVe9|Xfp1FW`*ijHk7x|wm&iM$L|!LnNs`QxQ6dMw zAN)@6&x2nH{&Mi0U^)1c!Lva%I1>y6{wMIyv?4wr00JNY0w4eaAOHd&00JNY0v`&2 zaYde!yJA4olZqUbT_K+%?LzBLw;e4yJf_IUWM?qv8LqA?cyox?bj4~y?LwhW1X&Jp zb>~g%kFr|7*XUI*$$12as!;f5YjFY z3Ry%W7*yn=awpgk7**t1*%9CHa{^rfjgfYdP{Jb;2l$cgaD|WC=MGQ|hZK2H?hQtG z+vP%`9XS}{R9yjv!Ewd+yxbK{P$m`MyzB}cczB`EY2E%0j4Hl4`T&3(5Mb;7GHFQk ze|$gy1V8`;KmY_l00ck)1V8`;KmY_DBY~Dr4oIz!O1_yuz~@^IRC8|?)>W;3Q&&^z z<8k^23+dZQ%jjdJhsHv|7G%@ z68#?^5C8!X009sH0T2KI5C8!X009sHfv1OnpZ;CJPGo?s|4XA!k8|(@1V8`;KmY_l z00ck)1V8`;KmY_lpqBvd|9hFB1Oz|;1V8`;KmY_l00ck)1V8`;o;Cuw|9{$A6#jq! z2!H?xfB*=900@8p2!H?xfIu$+-2eA7K?w+e00@8p2!H?xfB*=900@8p2s~{BaR2|b zwJ7`n0T2KI5C8!X009sH0T2KI5CDN*0_^YqPm?z#@_*!g@*m{8sWQq_!qXs611$CU zc{;+=13dMybYPgLUY-u|bWrj5WQ8RjmJE12J|EWq_j@OW{~!PYAOHd&00JNY0w4ea zAOHgUfdE_o$M65`hn9wqAOHd&00JNY0w4eaAOHd&00R4&0Pg?ybL+!*5C8!X009sH z0T2KI5C8!X0D=8N0QdjkO?@_l>g_XBtQpB|bVd|mnc$otlR13wtJB!5==ru5=|CI#O?00ce|0+Nl`(9UXfBb!X5V))HNxkL}9t9%TNpfb&N@l>6}I;ZH)M5f_1fz4g$p-C;mRw{{;|p+-Z<>Mr?1j zo>B5cbY?nCY^T`Vy9@PpgIN18_qS-LCx^cT{l=Frw>*+%1+Iga^ zmyDCNX0&xf_J$T0HA80gX)>Dm8CEuvSek?^Ko%iq*% zC)89b+POBNSedQc@1<3Xra`C1g5EG1X36MOjbi=(NlmfP3j!bj0w4eaAOHd&00JNY z0w4eadxt=PnldTHC2}iR4g9wMUk%U((WyyH&GhXe`d4>8X5LO{WvxBC{ekBG$3GclNE{ z4zqO&vIvUfSai)Q9rK2wQF-fmXN*Re)m?X_Z*)e8GR2lNZyEROm`XBc2V9(sK{WVc z$y2ZONVs9#ZFJ%*bg$FQJ^`2);zOZJQCZ?NMF@&UTPr-Tbz82*yYt~K&mv#@dOOR# zuGT7rX1+le7TX){{DE%I-Mb$tEY&a@MMvm~t_9khsP_ean;+$4M)VbHv+rU8ctQO*Y8wnv<0j{WL#b9YVV?6Z)nBJhDn>-jyATN z+^lQ$CXH>k58u^>v_r7chf|`0{17`xQW2x1n?>75HI?i#k{Qy_*VkPgiB_b0^nAnI zq&?GZAD`21(Q(-~kV@;Wn>FhD4u(Zr$0KxMeZFg9-H!EZ`3hZhE;qEsy{f_1G}QHE zCT%3!i!ZiZP_(G?NdSBAwptvk6}B|%%dW%Hx%BF+H*{}a-Xiuwj9sPY0QpM6U|wsn zxSmU7Qo6kcW7irIM)z5Kv4wW2de@%NMzM^e&k4+hy=-CNfozWy`_O#6*xA88qsHF* zNHc&NbMMG=E`y4R-dRZ;_2G{VbbPi)Y0NR-P%7P>v}-XT+B!Gm4OJ3y>l4lsywebk zt|w?kJ!cfP5^ejUmPzLdi9#aB8@`X_O5eusBe=8Xt_uODL5xhtCbrtf&7vK7^;vHy zk&w6Ar^h}A>{E2KyXpH#JW})9_HElLZL9n5juI=l0!S0AL*V#nP7TTk&6Vu+1Mi-GUJ9|n;ws$lqb9rOQ$hl2B@(|OU zP0i-TywJ0~iLM%v=-WSigkLCqYLO3qw*~I}vwizO$FoQ30F~S=Bi~@)#Dz`!q$rAO zMwKq2T4z<&HD1{{sZ!R~i~2?+T&LGdMf!YFxLK~78}xM4xp)enIk$4=JR1y7`H#F9 zjz!s2c$2PM8d`~7s_Pr{1n0iIaznExDE9o*hT-eYUGp0IKrp>z2nP(OUq6E3sW zP3M(|P#$f4EJSCuWw~|RKBsY0cw$fO?uYW?>$zNNUCnn4Y7aC=g~Q#wcY8tC!+Dlw z$Jwl}L5zTXxc0zXI_M4MsWUeo=8T}N>DiQ_7vhfRINW|evuiipI(OrMs6*$BJ5%&2 z58tx9wYXc`yPVhJNj;rQCsg|)gX?y?b4a+;=X#^Bd}sdL;b=dMqjbD=X`-G_OnO6? z>1>&DInFQS>-G~T*-R>xO(m0dPijjX+^&VTQ{c9@Eywy3-{M^f>;HQv76VH_00ck) z1V8`;KmY_l00ck)1VG?P5y1WblOhYfAOHd&00JNY0w4eaAOHd&00JPecL?DAfA6#f zECB%!009sH0T2KI5C8!X009sHfhR=(_y13dEcAi^2!H?xfB*=900@8p2!H?xfWY1% zfcyWw(-yD<1V8`;KmY_l00ck)1V8`;KmY`u6an`4|GlIsk?)efAzvrIL*6ByrdfPI z00ck)1V8`;KmY_l00ck)1V8`;epCVzUPU^3#QOO)@jWrb3dL{9)y4ObK}DK7CVrWN z{Vr79vF%qBX=;l7OaS{ygMf$TLM+Gsy8rk9&Car{{W}C>vLc0!@}DuGKN&-RYN~dR z-TzCYKdM8h4+0ZUr>~vQkq;+tREkrnU`4-AFo$X`HRCQ7bu#OYFESx)XNCO#URE< MW=2NFB4!{90E59H8UO$Q literal 0 HcmV?d00001 diff --git a/products/__pycache__/admin.cpython-312.pyc b/products/__pycache__/admin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c64b0c9925d049c2ca22ed8530446c63cbde7b5 GIT binary patch literal 646 zcmYLFy=xRf6n`_bU*3ljFM+5Kg)}b2TouxYAOtKl!Frov-I+@!?w2!r$aNP8*rrQu zDfg#XiG^Vx5U@(8Y^tlA+1p)!^a0v_; zN+ClLLclO1Db7e_iZF0=8mx-`drlTc(LM}sfH~*DT$9=KYvU`sAT3&SfykSAp?_;x zh_oBCOysv#%P{}FEZ8)uk}kJ#T_3174ZQ>o5n>Qwh9bgnztrag|6>R-(v{LQe;j=5fX;)jdixGf`^s zfYMLXIPHE0sZbSVLX~Me)BT1`L|SpFhlMN_ZP!>nAAc_7M^(lNSL1`z zI6p29cvg(dc4akgF0otAq;Jw2;~1dUj5&v!(f<71)x)Rrw^!>sXNPiqm2(vO`aWyq zc9SBnr1&81#kFS!=c$seC4uC}W?nN~@6d*u8?}u_R;iKOFlZUPY!`kd9~)|Kul9`j xLl8pO@a!6%+@J^ZjW1hgTNnOMw0VaKdU3J$Yqb4iv|WQCH39tSuMIb{{{UN-pS1u0 literal 0 HcmV?d00001 diff --git a/products/__pycache__/apps.cpython-312.pyc b/products/__pycache__/apps.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..42e51bc02487698667655b0d121944698238ad7d GIT binary patch literal 450 zcmXv~Jx{|h5WP!MRQe@^pb`TE3n)vnG9aWv1zW{R7R%IbDI~Rt8=|X;{%$66GHV2GRTKGCienMb6$4f-;4NGN!sVi@8-+9JQDtDkx!*mo}9); zq1-tdsHS!^SnM3WJMBe%`>`9FmptEd?X+Hg!!*Z6v!cCWP+r*5D61Y7S0Be4ni{#3 Wk?O}r#1Gi}U9+(LbomE5Q literal 0 HcmV?d00001 diff --git a/products/__pycache__/models.cpython-312.pyc b/products/__pycache__/models.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..67fe8f7342072e154a703885bd6748f79351f5ef GIT binary patch literal 1041 zcmZ`&J#5oJ7`=1i=BG(qT!f%PrC2J+OCyjvfDi)>EeKJ8=;Xz6eV4@P*$!t1nh1#u z9ongEUCY+089Fkuvk)nwktHUkZb*Tp6L-EejS!ry@7{O!zR&O8>AvLiS-{5r$Fu4o z1mFix&WAh%gZm8Z0R#{vz=Z~cKmscONm~FVFsvod3ohoPguq6knbhS|p6D=|aD9YH zU|;Y6I4>T2W2<`r0|O#pND{z_T6&x)FoGTFhzaGxkYiR(WaAMfP@srm4Echb|y#aawxY2jC?b%7oyY)>Z67oo^G-t=0w)D zHcf)PN?2XfrAS^UmbVcly#^ttT(vWGoAIQmfUxbj7BTC@vT-2lkW+EOpp_4+PB6zl z+xN*$MouAIwi+a)+_z;N(mb2(p;-(9z%jp>!3+y~;2o&3`S0(h;(&ear4HOs5`CG7gex;S4@6j!`ZZ$>H83_@y}EoFH4h2a9fuz-g) z=quB^t)14_^tAz(vC6DUo2F;E*fgW8X|iq&!g0iU`S{?#A z%_e$@2mTu3z<(Z8Sl9x6Rr_%3MAf>gc3}6^yY0v0E0>Q;J@sDuSzn#!tog1wfBf?E zVo!a_c!k;R@=0N~TbSK{{|WU9OYN1uqHVu9QM9h29W3^gJMAZfG?ZtA2LAh1JsD+C zZ2AIP7cR)p`I{2zZg7bs#b@aU!oG)8V;lVbf~ze2Oh5>~gX_PNSva#@-X%NaH()TX F`~xVC@@W77 literal 0 HcmV?d00001 diff --git a/products/__pycache__/urls.cpython-312.pyc b/products/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d3867e14a8a58a12cbff921b715fa65b9dd51f37 GIT binary patch literal 429 zcmX@j%ge<81UGAbWo!k~k3k$5V1qI~7XTU48B!Qh7;_kM8KW2(8B&;1m~)tNnWLB) z8JHMS8Bl(Jz%n&|U9Xn7R*hYjJ5G#cPp)Q>%imj4Ulj|i&LX+_p zOF?2u#!E&BhqWv-wY>Ni!!4GK{M=NKY+hn+Y87WeQGQBka!Ij%6%UlDo0C~w;-|@e zi#sJNF)uw|ue2zqxCrEyB9O<5Sb@YXPLL__ATw_XLiNRi^g)EUfm(o;m!uZu6|ZFY z4Aj8zOI^P_zbL!7ATc?$SlYml&JLlD(Ej+&_yuNHShQ}kaCAsdNWCtmdr?exgWnYv=MSvR M{7jA9MSMW505-mDqyPW_ literal 0 HcmV?d00001 diff --git a/products/__pycache__/views.cpython-312.pyc b/products/__pycache__/views.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ae21475cc886df5085790bf1a94398425acaa984 GIT binary patch literal 728 zcmY*Wy>HV%6u+}CP9Q{SsniZ#qJki1h{Z^Xm^yT-KuiSMD)>$~!LHN03sq53TZx4U zwleSsP<3JCe_(Ny0qI01rfyZUW#YYyUC}4qyZ8O^d%tS6n*`{^;UsEPLjIyskdq7J zCJ0A_6Ha52&<>@9JKT+(#O=5svyY_1cnNrE*YnHgn08E!C&d;Q@*K(%pPKShnet(% zL(~iMKycxW8^Df;zVhusGi=hMC+G)yPJFiZ{zjB0q7~^RHYMHDu`p~EEE0pTi4@yI zp|rw6jY%`uN#$EL=!QZCEB)@)n{-7aX)u_MqJnolv7=gpU1RHRqAG7eDubuyfgO-P z)!8rizb=1Y_;D|5J{ncq8EcQhL#{1S27_H>0|ZzE11$9m6bl3V{nCF*E}rE72dc4_ zB?Mv5!tl+x4#VxM4dR~CQ#>j;z{+<_rSQuNRPvcbpiMb_-4~%&#_h(j#2tM{;{D|e zFolyg8nOzXnavAqV*M#Db705O)B|9EOMU+H{-^!l^`+DL(x`s-VAUd(Ee1cM?AgoH zhp$G}^^C2{8icR;o|)nH04)`zQinsW>;%S3QZ8a;C$!j0Y;;U)o*iaVc?>bbSUiyn d;KI||+g!Mm(lc`Bj4WOc^5oDUutrlA{!EUAlI}0`1}!X`2{!TQosa1Rb;xH18~*O_A!6 zYOPEukfCF?dThtS8a!sq*rFXMK!Ajs0%Y;^_kN45O#c9Y|SJ$1?QVkIK`j|5ok&XHWMw-OiBRD2Q$v> z44;vN5_~Uppw2B$A%gr%BDt@eB;%z$38f--=?(03KXbx;3*o$M#4E@8{3xvU7fz&j zjWcr*b8(&%W0XgQ{{{n8xsdc?f(2Aj!#`6|km(yz=;wO}*fTh!lTnftR$ zKVqqGsfW6Dz$AjUne^3`o@6NYpGa@oN4~hwH!g_T8g+N;MZk2 zgge+p*tH4vsc2uea4*WwebJ~?bPvnjC9N-b=C*|ombtfY(J6d{kAfKHw&L4OwYxlg zY`L+P^*VU^0R8~y+#6y_tq#7$2I`fNytt zR6M+B5WxS74^P3%Lg~rQ%j=aV-%J#cx%o?WlwKaBm&Zko>y@Q(dG*=$sJuETua4i< z$1CrT-x1&bO-5&6E&7deTx6y7?nWz}??R7zm vxF2wInf^4c^BuauRq>MjDjy~Z2;qMUfck}^LFHL?q^=Cqm45+OqSLPdMI23{ literal 0 HcmV?d00001 diff --git a/products/migrations/__pycache__/__init__.cpython-312.pyc b/products/migrations/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ab5bfb519eaec876114d91236e8a0fa7201a80a7 GIT binary patch literal 151 zcmX@j%ge<81b0(^Wq|0%AOanHW&w&!XQ*V*Wb|9fP{ah}eFmxdWu{-AUzA;3keHlW ztnZSQn3taKlA4>ZUr>~vQkq;+te=~iUX)mpnV(mzA0MBYmst`YuUAm{i^C=ts30fR Xu80+A3?mR1gBTx~85tRin1L(+VKgO? literal 0 HcmV?d00001 diff --git a/products/models.py b/products/models.py new file mode 100644 index 00000000000..de979b56faf --- /dev/null +++ b/products/models.py @@ -0,0 +1,14 @@ +from django.db import models + +class Product(models.Model): + title = models.CharField(max_length=120) + description = models.TextField(blank=True, null=True) + price = models.DecimalField(decimal_places=2, max_digits=10000) + summary = models.TextField(default="this is cool!", blank=True) + featured = models.BooleanField(default=False) + + + + def __str__(self): + return self.title + diff --git a/products/templates/base.html b/products/templates/base.html new file mode 100644 index 00000000000..12ff4f97906 --- /dev/null +++ b/products/templates/base.html @@ -0,0 +1,20 @@ + + + + + {{ title|default:"Site" }} + + + + +
+ {% block content %}{% endblock %} + + diff --git a/products/templates/home.html b/products/templates/home.html new file mode 100644 index 00000000000..bc06d0708bc --- /dev/null +++ b/products/templates/home.html @@ -0,0 +1,5 @@ +{% extends "base.html" %} +{% block content %} +

Hello! This is my Django app homepage.

+

Now using a template ✅

+{% endblock %} diff --git a/products/templates/products/list.html b/products/templates/products/list.html new file mode 100644 index 00000000000..4411f6307a5 --- /dev/null +++ b/products/templates/products/list.html @@ -0,0 +1,14 @@ +{% extends "base.html" %} +{% block content %} +

Products

+ {% if products %} +
    + {% for p in products %} +
  • {{ p.title }} — ${{ p.price }}
    {{ p.summary }}
  • + {% endfor %} +
+ {% else %} +

No products yet.

+ {% endif %} +{% endblock %} + diff --git a/products/tests.py b/products/tests.py new file mode 100644 index 00000000000..7ce503c2dd9 --- /dev/null +++ b/products/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/products/urls.py b/products/urls.py new file mode 100644 index 00000000000..ef1cc806cdc --- /dev/null +++ b/products/urls.py @@ -0,0 +1,7 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path('', views.home_view, name='home'), + path('products/', views.product_list_view, name='product-list'), +] diff --git a/products/views.py b/products/views.py new file mode 100644 index 00000000000..e378b8c132e --- /dev/null +++ b/products/views.py @@ -0,0 +1,11 @@ +from django.shortcuts import render +from .models import Product + +def home_view(request): + return render(request, "home.html", {"title": "Home"}) + +def product_list_view(request): + products = Product.objects.all() + return render(request, "products/list.html", {"products": products, "title": "Products"}) + + diff --git a/trydjango/__pycache__/urls.cpython-312.pyc b/trydjango/__pycache__/urls.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1632d8e665370345fc3c387dd2e000bf7b660b4e GIT binary patch literal 322 zcmX@j%ge<81jUbkX5<3t#~=<2utFK1J%Ehq3@HpLj5!Rsj8Tk?3@J=0%sEWC%u&pY z3``8Ej43Rs%vl^TjR-o0bq(8UW(Yr>F^aX4U6bP_h^xtXi=`m3B;zF`gu_~vnOa_a zi{TbaMt*K8NH#AqH`Py*?G|@RR$^XyzFuijPH_>)s3JBH0diasJCL}=4U_>IRgzki zSG};m9s;rBeXxNGipZK6&BSG%*^~ujod{%K!pHI CN=r$hS*(FAXC4mU5_AtJa_n47bSb+WkcGJQf$K VL#f$Cd*r@tM0|&{%0cYc}=2OT-c06RFv)N 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 Y0T2KI5C8!X009sH0T2Lzr-H!$1MbxHk^lez literal 0 HcmV?d00001 diff --git a/trydjango/manage.py b/trydjango/manage.py new file mode 100755 index 00000000000..d28672eaec0 --- /dev/null +++ b/trydjango/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings") + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == "__main__": + main() diff --git a/trydjango/urls.py b/trydjango/urls.py new file mode 100644 index 00000000000..960fe9dc609 --- /dev/null +++ b/trydjango/urls.py @@ -0,0 +1,8 @@ + +from django.urls import path +from . import views + +urlpatterns = [ + path('', views.home, name='home'), + +] diff --git a/trydjango/views.py b/trydjango/views.py new file mode 100644 index 00000000000..f8d6312e861 --- /dev/null +++ b/trydjango/views.py @@ -0,0 +1,4 @@ +from django.http import HttpResponse + +def home(request): + return HttpResponse("Hello! This is my TryDjango app.") diff --git a/urls.py b/urls.py new file mode 100644 index 00000000000..e69de29bb2d