From 26d1bd517d80f23770d676550d822f1177776d18 Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Mon, 23 Feb 2026 14:09:33 +0000 Subject: [PATCH] 2 --- config/__pycache__/__init__.cpython-311.pyc | Bin 159 -> 159 bytes config/__pycache__/settings.cpython-311.pyc | Bin 5552 -> 5552 bytes config/__pycache__/urls.cpython-311.pyc | Bin 1557 -> 993 bytes config/__pycache__/wsgi.cpython-311.pyc | Bin 679 -> 679 bytes config/urls.py | 19 +- core/__pycache__/__init__.cpython-311.pyc | Bin 157 -> 157 bytes core/__pycache__/admin.cpython-311.pyc | Bin 212 -> 212 bytes core/__pycache__/apps.cpython-311.pyc | Bin 524 -> 524 bytes .../context_processors.cpython-311.pyc | Bin 763 -> 763 bytes core/__pycache__/models.cpython-311.pyc | Bin 209 -> 3426 bytes core/__pycache__/urls.cpython-311.pyc | Bin 347 -> 977 bytes core/__pycache__/views.cpython-311.pyc | Bin 1364 -> 4474 bytes core/migrations/0001_initial.py | 55 +++++ .../__pycache__/0001_initial.cpython-311.pyc | Bin 0 -> 3333 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 168 -> 168 bytes core/models.py | 41 +++- core/templates/base.html | 130 ++++++++-- core/templates/core/checkout_placeholder.html | 45 ++++ core/templates/core/course_detail.html | 111 +++++++++ core/templates/core/index.html | 225 +++++++----------- core/templates/core/instructor_detail.html | 45 ++++ core/templates/core/wishlist.html | 41 ++++ core/templates/registration/login.html | 32 +++ core/templates/registration/signup.html | 34 +++ core/urls.py | 11 +- core/views.py | 93 ++++++-- 26 files changed, 678 insertions(+), 204 deletions(-) create mode 100644 core/migrations/0001_initial.py create mode 100644 core/migrations/__pycache__/0001_initial.cpython-311.pyc create mode 100644 core/templates/core/checkout_placeholder.html create mode 100644 core/templates/core/course_detail.html create mode 100644 core/templates/core/instructor_detail.html create mode 100644 core/templates/core/wishlist.html create mode 100644 core/templates/registration/login.html create mode 100644 core/templates/registration/signup.html diff --git a/config/__pycache__/__init__.cpython-311.pyc b/config/__pycache__/__init__.cpython-311.pyc index 423a6362b2322713e75da67a35e209e76169dbae..77844aad3d6dc5e2c2e8781d66d1d0fce65ce60a 100644 GIT binary patch delta 19 ZcmbQwIG>SwIWI340}%Md&Y8$P1pq321dadz delta 19 ZcmbQwIG>SwIWI340}xbw%b&y+NCMIWI340}%Md&e_PlR1^R>Fa=5g delta 20 acmdm>y+NCMIWI340}xbw%iqYoR1^R_83p11 diff --git a/config/__pycache__/urls.cpython-311.pyc b/config/__pycache__/urls.cpython-311.pyc index 0b85e94ece283a83ff1af1d71f1b265c943eb37a..9ce5ebf727e0b56d3e1f60d2b4a1cd8905f10a3f 100644 GIT binary patch delta 437 zcmbQr^N_uMIWI340}xz_os;>Pk%8echyw#0P{wCHpv-iJ6owSW9EM!RC`LvQn<B4(nN!#&&XR%fIlz3*iL+$unWMN<*|KA)~!DE<#5J}@&fGTvZN zm~70NW+pu$eM0&LIg5*8mRH0qFS1x&VX?Zw!qMQ;A=DAx5k4XMBCp~VUd4+nN>^Bv WKCrX!Gc|C3;F-LYHHJkTXchp2typjX literal 1557 zcmb7Ezi-<{6h2a`&9y)mR5TN}FQWWXXv428G3D6*L?bJ<0fDW1Zjz3VjNPzapJ3Kyq?|a{ScjS+a zhJj#=|DxWehS2Zwp%|6icw;CCeUDt!MXutiz7nWiRgredF9ljx3-qp@K5KqCsB|l- zt^3uW)~zW>MMQVYL>;A>B`1#ou`388`7g zU*<*qmTaNZY_LhC)QVZCNgLxap4Ua6pT64h<|4TG!2MmY|X6a7%(M zNY5=}_qiPa7jGN);?PMIr)g8tPfWb+y4Vh}7ethaHpYEM101~Q*-?}`Gnpy=T8@_$ z$O4usgit7UxY2BG=5-BeKsIq`2jo^$+Rc`6*S9&pdIW{JORVoxLB)_TDa1?_7jo_c z*Z)x?@utmtl4PUxFGYKy&UD1oMtq34|o|rLr0PMiA4N-Li?SEIsG{iSDQA%}g4T|C&VOo*;=Po0rs=4pgG= z?B03wSyH{TeX!fx+3O_6!QuAd-rXMTP*TtB&cla?KcP23gx;E#JZ4sW6o(?V$aCVv zf->tFWnc5ic8HaIxao&sMlar0ZwAzjeR7*!gmC%W;eW!iC@G4vP*)Xgf#iabvOYn0 z`JSVXC-1uFXJHUBM^`3i??oBuwd0+W3#Zp#wqJfa)h^Gp%X6&?u8&S0pFBSOYT8(z zHP)xvrI~hVp_f+G?C;%I?i&uYrGP|`uS?f&KIx|?c&hZ0zEp*A0@v#d~_1}Ku$8i7v diff --git a/config/__pycache__/wsgi.cpython-311.pyc b/config/__pycache__/wsgi.cpython-311.pyc index 9c49e09df194d2dbcad4868349c9177db4b15571..bd17a1ad7f3434119b7c4563823e929e5e3e9171 100644 GIT binary patch delta 20 acmZ3^x}24JIWI340}%Md&e_O4hY0{NT?Eho delta 20 acmZ3^x}24JIWI340}xbw%iqX7hY0{RMg?d9 diff --git a/config/urls.py b/config/urls.py index bcfc074..2001e5f 100644 --- a/config/urls.py +++ b/config/urls.py @@ -1,19 +1,3 @@ -""" -URL configuration for config project. - -The `urlpatterns` list routes URLs to views. For more information please see: - https://docs.djangoproject.com/en/5.2/topics/http/urls/ -Examples: -Function views - 1. Add an import: from my_app import views - 2. Add a URL to urlpatterns: path('', views.home, name='home') -Class-based views - 1. Add an import: from other_app.views import Home - 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') -Including another URLconf - 1. Import the include() function: from django.urls import include, path - 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) -""" from django.contrib import admin from django.urls import include, path from django.conf import settings @@ -21,9 +5,10 @@ from django.conf.urls.static import static urlpatterns = [ path("admin/", admin.site.urls), + path("accounts/", include("django.contrib.auth.urls")), path("", include("core.urls")), ] if settings.DEBUG: urlpatterns += static("/assets/", document_root=settings.BASE_DIR / "assets") - urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) + urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) \ No newline at end of file diff --git a/core/__pycache__/__init__.cpython-311.pyc b/core/__pycache__/__init__.cpython-311.pyc index 74b111269bd81aac528770a53e2f849291524d56..7a1cd847e25dfc4e23ad0363d3b69f5ca2a5b01c 100644 GIT binary patch delta 19 ZcmbQsIG2%oIWI340}%Md&Y8$P2>>cH1c(3t delta 19 ZcmbQsIG2%oIWI340}xbw%b&>mG1t0(b diff --git a/core/__pycache__/admin.cpython-311.pyc b/core/__pycache__/admin.cpython-311.pyc index a5ed392d6714413db63120e4233d2e96cbadb5de..42e9f65f793192de3a879498a68db8d7bd039f33 100644 GIT binary patch delta 19 Zcmcb@c!iOBIWI340}%Md&Y8%45&$wL1uXyo delta 19 Zcmcb@c!iOBIWI340}xFAkw209Bmg!q1>^t# diff --git a/core/__pycache__/apps.cpython-311.pyc b/core/__pycache__/apps.cpython-311.pyc index 6f131d4873bc56e3763e4ed09960c6e3f34140e1..f77d222964527ed7874f517b60e00afc18911254 100644 GIT binary patch delta 20 acmeBS>0#ks&dbZi00e%qb2f4_G64WA0R#O2 delta 20 acmeBS>0#ks&dbZi00dRv@;7obG64WD>I9Vl diff --git a/core/__pycache__/context_processors.cpython-311.pyc b/core/__pycache__/context_processors.cpython-311.pyc index 75bf2234fb21a6b62efc5cec11af9512dd0c9616..7daedb57ce7df041b330d5b31db0aa8095cd0d81 100644 GIT binary patch delta 20 acmey(`kR$|IWI340}%Md&e_QQfe8RUeFe+_ delta 20 acmey(`kR$|IWI340}xbw%iqZTfe8RYW(H&c diff --git a/core/__pycache__/models.cpython-311.pyc b/core/__pycache__/models.cpython-311.pyc index e061640edbdcec3e5c1744466c916e7acdd2763b..42c46bb1be2184af837cf48e1687045d15bb51da 100644 GIT binary patch literal 3426 zcma)8OKcm*8QvwA1=_W%y83o$^pA|)OWf&cD z|DDG-uYc$J=KotF5fdOi{@tIokHUiRZ!Gju=peJd1(_!T5s0V@HE~rGF(1$awcu({ z6avC;1QPtCKqM-zOTEs|f`ae^JYHH2aa0IU;rF1z92EhS{2o+Gm8Y!`>li*C4P z5UQJyla@`&$_G>OS8qA{|AgWbfeNc45mo~Mfd>0aC1N}9OoZja<0V|~Ac6$j(z5_y z;5op+VgVEBm7hW8hh9NgmHi_enIp;(-2K>%gh;3z_RSF|;EYv;$gtt48=I?}7HgI* zgYEtox;z)%SgrI>)oHzARW~MRp;E|w#f-buG!2$B?&gX{t4-9tCY?R7$vTQIq>3z0B5u|0mgU+&zborFs;L1H-2(+%88$RYTEJho%nete!g|Bt7JE?J4$vZX#e6H zTe;m)Zad2D)@(O6x_Q=#jdo&LCzfp$yQ$n(*h%GfigxN^Cw0+DU2M&DQ{!9V?c`JP zV%Sbiby8DKYN|E2CyAjGd%{uUtrM3xK#4ZE^V~FFEhX|QO+c6(aQXJD? zb(|>egb$PUVTNe1o%CTc9CPe&E(vy*@?nNK29E+yfJpoHKSDA<+7HPwAnmXlE*ec{ z(tI!(>mU4>B{1|pmmyU3bd)GL^X>jcp%nq|5}gqF2hNmm;>kkQ;F z0NF@z@%Z`0+yhGQnT+@Sl=t-%BT}v!8lag1mB4qU1e{ju#sjrP$p0@I43#7=vXk&) z88Dt?cyvOiZVY+;>hXUJF@64T*zyT}uov>j*@rmDaWp5uxQUyyE3-G%;*BroinEKH z`D_$haWXf$s5dJfr6m)xEQ_^qLd`PM8kT0%-Pm=|C9P8bfGVF;**KpQ++3lk9d6?2%gUs+CJ5zP=h=6}HSm1Qp=eGuLgdZu-2FD4{@*3%W`LPxpaC>KCfdJ6Qp9Y5EJ zpL62pK!Gw7TW6ijL??6F$((L|(M?ZmjX3Fvr@%{`?zh?r{O#&b|!8hr*$1U8VRtfkoH6b)|!=7p^u@_I@3x5g1&H@V?!Q3Y~So<7QyE5(wFL^c(#rFux@PI!K!U}Y< znF9l1MP_6>4_vU5SKz-h+&<~#FM9=BzH%ToLq3Oj>T(%pmeBkX4X%rm)?3mH6kQqQ z5d;}%j&6A;*JrT-4f@>N2J@C{<5`R%vfnN3th9gsuaE8cawop*#Fv4|iLuQUCo%Tj z{TCxYj@gOnPGZ_gOt-Fglc$iMryxv7PIZz~PI9Vs1G)7Ha?5XCVcqL~Ls$&`3UPkp zeOp}SLSA;GWW7|c7zMKCMOdQ;<+4$?n6_4c+o4+UB0TOOH*^c5bT48$1%vPn`%c*# z`HC0C{hBQT1doRK6PUfAD2iPnYY+ar!g+h}zbDBe#6m~S*2s4D71qD*Hx8#o(3zuV hbLH{vS6KhL-*`4Ef(44TX@K?*b( zZ?Wa(r=;c-`)M-W;!Md(%uCPLOGzqX21>4E_zY6>OHV%|KQ~psG^sSNq*On(A~m_R zB)>?%JijQrxF9h(RX;huC{-U~j9x+IFAf_ZyEG@&u80Guoe_wOWr4&8W=2NF8w@fR Ku%RM0pb7xLi8T)Z diff --git a/core/__pycache__/urls.cpython-311.pyc b/core/__pycache__/urls.cpython-311.pyc index 5a69659f6c6e0ae848e54157af197c543a09315f..b816ebb04b773f61e2b7d7f4e0fb3de8a894ab1b 100644 GIT binary patch literal 977 zcmZva&ubGw6vtP!B0>Nq2^1o6T;R-8D6* z9CPfU;Kf5uTG2nizd~kV4`K1&KYourS$cL8MAtGxuI;5XbO@~@UsaU$xEDN)v_^Da& z2ot-Z>HVx`ST=Q3+oVcGGwgD=&7rlw(Ev>JG^?d+maX{l!0m4Zo?@HLrp`-=Bjyz} z%uhIiLmCT&|?ek(;aDNpml+uaY>@k+t`GOTRBrT+LBWNB2Zb@j2fHkh8%4aW$3GMXRTrurROj)#qYdxg6ZZ5i zgPIF94{FoI@b(!wH!jKyN-mTIT!M+Ro9_-H(_eaEg@Ql4YU~uTd ip$CVvb2iUjoWCBOGAO!G^q@FN$J3#KEFPNSANU8{K?pGb delta 252 zcmcb}ew#^SIWI340}xbw%g@XL(vLwL7+{4mKHD%%)KIBUVO_(vjG2L9H4sBUI%5<| z3VSevCdW&VfF|QDmV(5RjF*g1PDXxi>Me#MkU1c^yu{p8KTXzK+$mX!dFlCjrA0Z# zMIgg&v6f|~mKTE+-r@!d15GJOEy^oi$?zE{&G1V{KO=wgdL|PtJ|GWdda>8!w@gwN t4;aKRprQ|K46K|DE*(N0Av4%6u*hFzk-x$s|ACo_pQ(Wx1dDip+5xU!KGgsK diff --git a/core/__pycache__/views.cpython-311.pyc b/core/__pycache__/views.cpython-311.pyc index 2a36fd69370b38a98d8b01bf8eb9817c42f16ed6..8f7d76df7afe96b44ee15ba3ae5784d692512cf0 100644 GIT binary patch literal 4474 zcmcInU2GHC6}~eb+Y`^&PMi=hkPt%B#1(OtuEX*dvJjFiZ8u~gfMh|v#xt8ZjO}n| z93XO5R>cEdAuV041P@eltCoVG5|4T40}p*b`!o}c6leO5mUinoJS+@kG}{4isO6ad*N1uvjT>vv>M#ASJ~ zoRws3wav*|B6n>;PQe#W#NLZpJeH+221SIi0!nT!olRi*MjliWXqZnxv|dzYJdWk0 zmd<4-b2tM!H#Pl^sjWYr%VSlxd}p(&hVv;chb{4PTAf$Ys&-bBGbv(NZyxBl;PYk~ zv=2}LE!0O)soBofN{qxlh7dffhXJiH|HCZTmRYRE*^8nDat7K;P1?E+ZF2gGtH9t` z!BuiMEE+w{-{=>Z=iFm>k7xF~Y#MbtN0+^@m%|?RVsYo&_A0Q?JzMPIbOm+}N!~v( z690%>;k01WiICJ%;2y*KKC|B$;NhFLm>U*?SjtPXLISO&HAPM&(y3flOQy3b=sG1? zP2uz+iM?Y4x4{O0E&j9&pveNd#IspV#u>mAR1tXP0eEN>OEs^v;5iskt%t-wAQ+=eiD zpNQM?63ohgyCAd=irk$LpW>-hjs4o8+aR(vXcvb5O)#RzWEo3 z2S~G_jF8r32T*4=B_=De0AI9VTQ$-QAJK^OYHh(zq!J;7EvG;vTV(4g?dmRzQ+_n{@C@1Kc@P$hHfQ^3|Dob!dB^VJ zblDrYQ!u@K1Vo=Q8{vL4JhUE;t%YN&1AjmGYDo{rjPNBhd}%#=buE0=2q(;N;%)%2 z)gCVI9;~=s1WzCUPkaqeu@``+lcsP|=T71Su)70KHs#O4$WOzQX5$3GRUxqwL^aK9 zAv2Cdk6paJyobgF$g6e{C7R-5`5O9&s~RH_PE_@}tLpVAQ4E7nNd^FAR6X6+m|9yB zzX#(#Cx*oB;O(~FzZ`qftGA69Z6jveNb#2&LL14oBdaG~?beUY8p1_WxTtd%s}5>P zDr7qd!&2ZNkoC4;+m-C3s*jOxNEC8V+8`alx^eTYFdCFH^;UBq^A`6}q%Mc3|LPE@ zaJJlOxWmfFT|;#bd>Zn%9P346KgmhfW#7X;V0@bEn?{tN*~7KM__WL2IqyzfzO7K1w}o zgAk}_Q!R1@-gm{d!WB5R1Mci?$;?Si407Ji3pOp5nxfU%UjhtC;T^sRODm45T$lF@O(>^NZvqoy#bbEEG7)Blm9 zFaiH^clFwsms8hsc`dQ1K-n>$Q=mep=|8T^N&2sn@*o_j~ z8bfXMah0Ktug<^n=%eQhVa60@bZ+Jy3>5-~aaQdTbDc61zM|PoM6<@`D<@u|dS^;a zmTjQoS*El)<)=5rDzxsS&|SUl7S zOGzayK^2l*k}=@|nuLz{pCMXOQ#j-AsqTS4f)NsR^|v6PM1`yV^M{>l-hH}v-$rm> z$@^!~2o9OSp}SmJ2!1*G#pv(G?v251-qKfY-}&I^S4V$;{OjX)&uoZrbv=w3Vh_-? zF7|A+?|C?Bv>!0r59s27iWlsE@S)ZoBe>rT?!U{`NPA?}^OAemWEtU<|Lt#qoKM2V)mWZq4FSwSG|F`@{u T%qMh?E%_E^3N+hG>cjs6Fdxjk literal 1364 zcmZ`(&1)M+6ra_{dS%J>I&SM!uH%hUh$T{~CE!96oTjQ1oHkCdQ$lozPf-Q6#oM~=1-7}AYwoe=&3h>36z}rW~~)fO5P4{-h1=r&HMPV zzfVm~BA|nRhVUX&zZ=1NEJDd#(kRMro?7~GlVKiARAFbK7y={g8`rq_)Wa;XDEltUWCmB zkq~sth&3ZeP{;A878u54V{Oaty2i>_vx<&kIwj51DaMXgGg(=)ND+pj!HI^Q9g`Br z#tzdA%!;PvWg3a1>()Z2BR!#4DWHiJ1dw>FOuS)~xge&2p-9tZ06jh%7)=`o)~k%rY>m)oo?Fy$ z*3WOp#5FJD)_FvD(?z&0py>SutcBjF^RHFyMAbU#a#vk`t*)G?D;+i6Rnx7Fo|by~ z_(Z$b)~@ZR_tUQyT0itB&pp5LYvy^Tl^e+D)6aYJ%l+g^CzEdC%omzVp>MZ5DOS%5y(&3}_$}}zkKaKe7 zo~k$R6$MGSD1St8R`7+j#O467w!e!0t*Lvw*$F_7`D)c%7##=6$xV zzb!!$;;RFd&O?caMC3-EhIb40c>}NWlqA$)YX;jAt)pxVp%2c9bnK*7SwQi>i)gr! zIAiZaTk{v@&wlmA*q+f15+ULsuKuPM(>P zR1W+?4o7}P4wLVJKlPjOf7G~sCa$Bu*;@MeNj@hoZj?dUWl<3uV<%%)cI5}qICPpD z%>Ss}RTf#`o@SV&UNm*WBn8be>0U1BX2C+;)a4?<1rsCIStCldK-T3Iyw3avCQ3n7 zHZTjWVzQ(gSk?+v%-o#r{SOicT`W*7ypmO{mCa@5F%?tA8<%jpoK8F;dI=kbP7-=4 zF{4*&brX}sLQ%n55kt%KFJrYPoA{MUcttVSlA<#|epSQ7R1D1gwPhWk)rktqo+Y)Q zt-#K86^4W#G3G5PSVhn;XY@LO1#UyFmjRKtt|?#DG3!LwC=#W{yDIa5XGOfn`_LXQ zL$KM6a1p#!<(gV3V#DzSDP_epm=D#RcD&JLJ2RF|tYN%j>><9hN5!jHO}fB{?=xIh zGz}AS)v+49r-7eUj1-6{x#kFc(`dB-ZX+@Rg1vD^+EHBA0hHnR?*}Yp%>8A7gM7#Z z6Z~;fr0HvN0U;Jpj`G-1v^_UAdWt&1>7$vXi}`g;hHC_ykUfG`o?a(=lBu)cbH!Lz z6~nw|;wtljU6?JH%7D@5-1{E!y1AbS||K!Wj)hR7ylqXU6}nse)Kpu`;Y|>H55o{=Zsz2kNA~J_$|qT zpDE>ODEc{GJzY z00+m5Dg~{qGYKt0A@LmW3hbDfUYMEA&9Z6T0C^}c@C3JCsTJ{R8&$9@d=(Sg*rtJXkj$Nj?jZFdx1u7HX}E!$W0o$wHqF!(bVQuE1IGcFKJ1k(MmH~ zv7!|kTG$xV;H>~;pOaSq5&Fn`pg#n;U8K=l&FC#FdW(i` zA9t&lMkbq)Nh>l*LsPrqI89{#=Cu;pW@6k*jMLB!+tpF->gdkrKaA7pd^0+4MdxYg z@ospC#zr@vS+UWb9=iCP#$GgIFRa)L8hUvwLM=h~_`Y1SgCIitfjHdn3T8~^F0!*k8yIcs>1hVI%ESw4~7nf&)n>-Gcd_M&zBPjtlulN;g# zzE|QQ-wP=01(fggNNV+U@-TPvFaz1=q!m93^YD9w8KN-8qc8>;jOCiKoE764+zm(Q z(DltpYv}s+>i6r`)Lm=pi8b|tep#VIE6t%5YiNarR683fUSz55XWzfHCT6XPd28Ys z#X2>=2CQ`vUCQ`atd zU*G2+@}zxul0Fu3&TbklrJcXw>GlC8_dyLV75i+bi@H{F8j$~Rh25*{CgYsP$K0-M z{Bz)b@_pj;x;x}44Eg_Z!vxZDiJ}O{Q~Zz$3Fo`pW{yclsBq4=<;{rRmT;DQ8?ZuG N-tvk4b7pN+{|CrDZTSEI literal 0 HcmV?d00001 diff --git a/core/migrations/__pycache__/__init__.cpython-311.pyc b/core/migrations/__pycache__/__init__.cpython-311.pyc index 9c833c8090679ee4c9ffd863c8f7abb0bb73a5db..14978049cf8eb558fb8c3e6253fdedc0f659998f 100644 GIT binary patch delta 19 ZcmZ3%xPp;;IWI340}%Md&Y8$P7XT~D1gQW3 delta 19 ZcmZ3%xPp;;IWI340}xbw%b& - - - {% block title %}Knowledge Base{% endblock %} - {% if project_description %} - - - - {% endif %} - {% if project_image_url %} - - - {% endif %} - {% load static %} - - {% block head %}{% endblock %} + + + {% block title %}Academic Excellence{% endblock %} + + + {% load static %} + + + {% block extra_css %}{% endblock %} - - {% block content %}{% endblock %} - + - +
+ {% block content %}{% endblock %} +
+ +
+
+

Academic Excellence

+

Empowering learners through world-class education and expert-led courses.

+
+

© 2026 Academic Excellence. All rights reserved.

+
+
+ + + {% block extra_js %}{% endblock %} + + \ No newline at end of file diff --git a/core/templates/core/checkout_placeholder.html b/core/templates/core/checkout_placeholder.html new file mode 100644 index 0000000..cefa4a6 --- /dev/null +++ b/core/templates/core/checkout_placeholder.html @@ -0,0 +1,45 @@ +{% extends 'base.html' %} + +{% block title %}Checkout - {{ course.title }}{% endblock %} + +{% block content %} +
+
+
+
+
+ + + +
+

Complete Your Enrollment

+

You're one step away from joining {{ course.title }}.

+ +
+
+ Course Fee + ${{ course.price }} +
+
+ Discount + -$0.00 +
+
+
+ Total + ${{ course.price }} +
+
+ +
+ + +
+ +

This is a placeholder for the final checkout flow.

+ Back to Course +
+
+
+
+{% endblock %} diff --git a/core/templates/core/course_detail.html b/core/templates/core/course_detail.html new file mode 100644 index 0000000..29e524a --- /dev/null +++ b/core/templates/core/course_detail.html @@ -0,0 +1,111 @@ +{% extends 'base.html' %} + +{% block title %}{{ course.title }} - Academic Excellence{% endblock %} + +{% block content %} +
+
+ +
+
+ {{ course.level }} +

{{ course.title }}

+

{{ course.description }}

+
+
+ {% if course.instructor.photo_url %} + + {% endif %} +
+ Instructor + {{ course.instructor.name }} +
+
+
+ Duration + {{ course.duration }} +
+
+ Price + ${{ course.price }} +
+
+
+
+
+ {% if course.image_url %} + {{ course.title }} + {% endif %} +
+

${{ course.price }}

+ +

30-Day Money-Back Guarantee

+
+
+
+
+
+
+ +
+
+
+

Course Content

+
+
+

+ +

+
+
+ Detailed overview of core concepts and initial setup. +
+
+
+
+

+ +

+
+
+ Deep dive into complex topics and real-world applications. +
+
+
+
+ +
+

About the Instructor

+
+ {% if course.instructor.photo_url %} + + {% endif %} +
+

{{ course.instructor.name }}

+

{{ course.instructor.title }}

+

{{ course.instructor.bio }}

+
+
+
+
+
+
+{% endblock %} diff --git a/core/templates/core/index.html b/core/templates/core/index.html index faec813..b816327 100644 --- a/core/templates/core/index.html +++ b/core/templates/core/index.html @@ -1,145 +1,86 @@ -{% extends "base.html" %} - -{% block title %}{{ project_name }}{% endblock %} - -{% block head %} - - - - -{% endblock %} +{% extends 'base.html' %} +{% load static %} {% block content %} -
-
-

Analyzing your requirements and generating your app…

-
- Loading… +
+
+
+
+

Elevate Your Future with Expert Guidance

+

Discover a curated catalog of world-class courses taught by leading academics and industry professionals.

+ +
+
+
+
+
+
+
+
+
+
+
+
-

AppWizzy AI is collecting your requirements and applying the first changes.

-

This page will refresh automatically as the plan is implemented.

-

- Runtime: Django {{ django_version }} · Python {{ python_version }} - — UTC {{ current_time|date:"Y-m-d H:i:s" }} -

-
-
-
- Page updated: {{ current_time|date:"Y-m-d H:i:s" }} (UTC) -
-{% endblock %} \ No newline at end of file + + +
+
+
+

Our Courses

+
+
+
+ + + +
+
+
+ +
+ {% for course in courses %} +
+
+ {% if course.image_url %} + {{ course.title }} + {% else %} +
+ No Image Available +
+ {% endif %} +
+
+ {{ course.level }} + ${{ course.price }} +
+
{{ course.title }}
+

{{ course.description|truncatewords:20 }}

+
+ {% if course.instructor.photo_url %} + + {% endif %} + By {{ course.instructor.name }} +
+
+ +
+
+ {% empty %} +
+

No courses found matching your criteria.

+
+ {% endfor %} +
+
+{% endblock %} diff --git a/core/templates/core/instructor_detail.html b/core/templates/core/instructor_detail.html new file mode 100644 index 0000000..260290b --- /dev/null +++ b/core/templates/core/instructor_detail.html @@ -0,0 +1,45 @@ +{% extends 'base.html' %} + +{% block title %}{{ instructor.name }} - Academic Excellence{% endblock %} + +{% block content %} +
+
+
+
+ {% if instructor.photo_url %} + + {% endif %} +

{{ instructor.name }}

+

{{ instructor.title }}

+
+ {{ instructor.expertise }} +
+
+
+
+

Biography

+
+ {{ instructor.bio|linebreaks }} +
+ +

Courses by {{ instructor.name }}

+
+ {% for course in instructor.courses.all %} +
+
+
+ {{ course.level }} +
{{ course.title }}
+ View Course → +
+
+
+ {% empty %} +

No courses listed yet.

+ {% endfor %} +
+
+
+
+{% endblock %} diff --git a/core/templates/core/wishlist.html b/core/templates/core/wishlist.html new file mode 100644 index 0000000..18cd4ba --- /dev/null +++ b/core/templates/core/wishlist.html @@ -0,0 +1,41 @@ +{% extends 'base.html' %} + +{% block title %}My Wishlist - Academic Excellence{% endblock %} + +{% block content %} +
+
+

My Wishlist

+

Courses you've saved for later.

+
+ +
+ {% for item in items %} +
+
+ {% if item.course.image_url %} + {{ item.course.title }} + {% endif %} +
+
{{ item.course.title }}
+

By {{ item.course.instructor.name }}

+
+ View + Remove +
+
+
+
+ {% empty %} +
+
+ +
+

Your wishlist is empty

+

Start exploring our catalog to find your next course.

+ Explore Courses +
+ {% endfor %} +
+
+{% endblock %} diff --git a/core/templates/registration/login.html b/core/templates/registration/login.html new file mode 100644 index 0000000..e57f4a8 --- /dev/null +++ b/core/templates/registration/login.html @@ -0,0 +1,32 @@ +{% extends 'base.html' %} + +{% block title %}Login - Academic Excellence{% endblock %} + +{% block content %} +
+
+
+
+

Welcome Back

+
+ {% csrf_token %} +
+ + +
+
+ + +
+
+ +
+
+

+ Don't have an account? Sign Up +

+
+
+
+
+{% endblock %} diff --git a/core/templates/registration/signup.html b/core/templates/registration/signup.html new file mode 100644 index 0000000..afe5c3f --- /dev/null +++ b/core/templates/registration/signup.html @@ -0,0 +1,34 @@ +{% extends 'base.html' %} + +{% block title %}Sign Up - Academic Excellence{% endblock %} + +{% block content %} +
+
+
+
+

Create Account

+
+ {% csrf_token %} + {% for field in form %} +
+ + {{ field.errors }} + + {% if field.help_text %} +
{{ field.help_text|safe }}
+ {% endif %} +
+ {% endfor %} +
+ +
+
+

+ Already have an account? Login +

+
+
+
+
+{% endblock %} diff --git a/core/urls.py b/core/urls.py index 6299e3d..606b0c1 100644 --- a/core/urls.py +++ b/core/urls.py @@ -1,7 +1,12 @@ from django.urls import path - -from .views import home +from . import views urlpatterns = [ - path("", home, name="home"), + path('', views.course_list, name='home'), + path('course//', views.course_detail, name='course_detail'), + path('instructor//', views.instructor_detail, name='instructor_detail'), + path('wishlist/', views.wishlist, name='wishlist'), + path('wishlist/toggle//', views.toggle_wishlist, name='toggle_wishlist'), + path('checkout//', views.checkout_placeholder, name='checkout_placeholder'), + path('signup/', views.signup, name='signup'), ] diff --git a/core/views.py b/core/views.py index c9aed12..afd7891 100644 --- a/core/views.py +++ b/core/views.py @@ -1,25 +1,74 @@ -import os -import platform - -from django import get_version as django_version -from django.shortcuts import render -from django.utils import timezone - - -def home(request): - """Render the landing screen with loader and environment details.""" - host_name = request.get_host().lower() - agent_brand = "AppWizzy" if host_name == "appwizzy.com" else "Flatlogic" - now = timezone.now() +from django.shortcuts import render, get_object_or_404, redirect +from django.contrib.auth.decorators import login_required +from django.db.models import Q +from django.contrib.auth.forms import UserCreationForm +from django.contrib.auth import login +from .models import Course, Instructor, WishlistItem +def course_list(request): + query = request.GET.get('q', '') + level = request.GET.get('level', '') + + courses = Course.objects.all() + + if query: + courses = courses.filter( + Q(title__icontains=query) | Q(description__icontains=query) + ) + + if level: + courses = courses.filter(level=level) + context = { - "project_name": "New Style", - "agent_brand": agent_brand, - "django_version": django_version(), - "python_version": platform.python_version(), - "current_time": now, - "host_name": host_name, - "project_description": os.getenv("PROJECT_DESCRIPTION", ""), - "project_image_url": os.getenv("PROJECT_IMAGE_URL", ""), + 'courses': courses, + 'query': query, + 'level': level, + 'levels': ['Beginner', 'Intermediate', 'Advanced'] } - return render(request, "core/index.html", context) + return render(request, 'core/index.html', context) + +def course_detail(request, slug): + course = get_object_or_404(Course, slug=slug) + is_in_wishlist = False + if request.user.is_authenticated: + is_in_wishlist = WishlistItem.objects.filter(user=request.user, course=course).exists() + + context = { + 'course': course, + 'is_in_wishlist': is_in_wishlist + } + return render(request, 'core/course_detail.html', context) + +def instructor_detail(request, pk): + instructor = get_object_or_404(Instructor, pk=pk) + return render(request, 'core/instructor_detail.html', {'instructor': instructor}) + +@login_required +def wishlist(request): + items = WishlistItem.objects.filter(user=request.user) + return render(request, 'core/wishlist.html', {'items': items}) + +@login_required +def toggle_wishlist(request, course_id): + course = get_object_or_404(Course, id=course_id) + wishlist_item, created = WishlistItem.objects.get_or_create(user=request.user, course=course) + + if not created: + wishlist_item.delete() + + return redirect(request.META.get('HTTP_REFERER', 'home')) + +def checkout_placeholder(request, course_id): + course = get_object_or_404(Course, id=course_id) + return render(request, 'core/checkout_placeholder.html', {'course': course}) + +def signup(request): + if request.method == 'POST': + form = UserCreationForm(request.POST) + if form.is_valid(): + user = form.save() + login(request, user) + return redirect('home') + else: + form = UserCreationForm() + return render(request, 'registration/signup.html', {'form': form})