From 0f4350d71db2ecbce6f5c4bdced2120a643cfcf3 Mon Sep 17 00:00:00 2001 From: Guamss Date: Mon, 23 Feb 2026 17:40:44 +0100 Subject: [PATCH] pagination fonctionnelle --- src/myalbum/__pycache__/app.cpython-314.pyc | Bin 1393 -> 2328 bytes src/myalbum/app.py | 49 ++++++++++++--- src/myalbum/static/styles/style.css | 61 ++++++++++++++++++ src/myalbum/templates/index.html | 66 ++++++++++++++++---- 4 files changed, 153 insertions(+), 23 deletions(-) mode change 100755 => 100644 src/myalbum/app.py create mode 100644 src/myalbum/static/styles/style.css diff --git a/src/myalbum/__pycache__/app.cpython-314.pyc b/src/myalbum/__pycache__/app.cpython-314.pyc index 8b3bcac913e577005635e5b437b6cd378053234d..927ddcc21b4339183c740e5c8a3e005119d77561 100644 GIT binary patch literal 2328 zcmZ`*&2JM&6rc5ackTF-B#!G~;#kBWmtd2SHlae$stL855>^&)(C`OzcJ1*}MCUN`oA=(l zH}k%BkJ)V<0FUs`UyHXG03NFwGUyiA{~Ut~NP-v@1yEfLQ7U49h6oMmh!GlnDvgdZ z5f-u;Lup?=Pmdge|xNIGvn%bf5vW-7POzLZlBN8!_8;rCV z&=I2!gP{3ubw3rP5pyn|R<0n2EEKbXoPt6@%BP`#I9a&5ASf_MAtqW#=L8J6yr{se zD62Gnt^`YEM<}eoG!!#oN!=@m3TN~y0AR)&)eHOI;JE@4Z60rE!#3ct|6Uw1?6Z-U ztOVkK=U$Wm?YA9mv9dM*yda_4)>IeZTmOdtP`C35devcbG(~a(N~foyho=I6zd?ih>vqP zo?bBdDgcRIBE@?N(pNu7;CnX*-%pUf@`rUykRF9NM|@1|OQyJq4-iRxCAXK%n14j4 z6SRn9C4V0`zcj~;F^1TYtp6j!J||;~Q+$wU*4M-_f~U(?5aZ$&D;TDye;F}0>EsPQ zF!_^O8hzloXul+ygRT5hPfK=P_ENjD^#~8L#5TaaWbAf359~NI+xe~OIZh;FrfFx~ z9y5=&?uYw=1sNq=>xde#-lMr7t%|pbL#!`sV0q|h^6?q-kCsjUMM0aUs@Do zWWo(iSrp-%thxpnOA_W8aErn(gmcI^UlNOm!)ApgaTXaBu`D1qEn%swY{DmG)hj^< zvbP$ckk#HIJ5_CrszZ_07J@9ZqO8D_<_zS--4v!YSF|Yhre9L9lv3tOi*mnuh87Ds zWL7PwvT2w`^rDzW^jr=iW=2jIvxq5_vO-=~yM^MwQ~!Sl8V=8u3PL!ykS-|UaY4BP zOHw#1TniVjr}Hxlg|H%L+8DnoBwa_0c13vzt5f@&@*$361^nsqt|nFz+pfT-E3iJh zk*T|eD^q)%Yn$_Ja=vZO|B&&U_UhGJp}NIi8Q<%2ulc_kYxst?I)^HgJMM#xz7t#S6E$P^o~yTZbhPFgt4!^3 z9n~{+u6Hfn;C%Pr-eA6cw=q247#QF2^sQZO_)pe6BUSrjXJ6I0Ox$9rFV&|UYuUbl}{>78!(>g3Ag zm*=bIovxnMv6Zo96Q(*ntF{%}T4w!J-FdvqytseD0<+_$ZP|8PSQ}rT*f_9pawD)F zdJw4hoc-1G=2H(i;Cto;&aPXpeO7K93U4{Wm5BPDksH?=U4bnwut7Dr;Eu_8%m0O? zYQmSa9$Y*9fUSKn)39V}#>_sB0SG!}A6^hMtA2)M^;@YWUb8l6KKh=PzReP_w}Kne zl0#{x=_~3HwFe_pDpgDugj5RAIO2$rOAAoY!u=hPhgGo?n%HT4d?7EKk>9{u^)Et+ z;^_%ZQPl6i{1+J71VfL2>k;UA1p4=^hbrbBS5FOe{=r(RksGB7jeTQaKJk3)sh+&i T_tbEN%2N9@FgX9wpl0e{|ES)t literal 1393 zcmY*Z&2Jk;6o30=@5Y~y)Rsw!Q*wz#WlJ=ok*KO7(#T7IT1#av4%XJ**qiQpSF@8Q z&B>@pIBI+G?ZXD6_zPLYrU=UVS)9W%`Q;$?-e-UUI5``DymlKt4#1Z?As7`pwJt^Y`-iPv1NJ(B7TcE4;av zK0lBS)YPE0?QA(u)XDvc{N1J7OJBY}(Dui3cjs@a-mKU>(D`6@k7BA}+XQ(LJ! z*3QDinQvPUX21XNyYi!RyTOn1zrFU>PnY*{`tRzy&ob~*?!PP~CwDIF#vZ@(Bys6i z`O-0M6G~~swx1{~?Bhpl$|0{rs_E~A;~LH|Jz}9eq;5C`_N5WE*<|BtHi<-8Aqw)= zuoaT=1E6V^Zz>GCKwqvo)1yMgG?9SQPhg-;5DbGN3Ri3#Ct;aCDO`)>%t{Qm<9{1+Jj diff --git a/src/myalbum/app.py b/src/myalbum/app.py old mode 100755 new mode 100644 index f0061b3..714e84c --- a/src/myalbum/app.py +++ b/src/myalbum/app.py @@ -1,24 +1,53 @@ import os -from flask import Flask, render_template +from flask import Flask, render_template, request from PIL import Image from os import listdir from myalbum.models import Photo -PHOTO_DIR = "./static" +PHOTO_DIR = "./static/photos" +NUM_PHOTO_PER_PAGE = 9 app = Flask(__name__) + @app.route("/") -def hello_world(): +def index(): + requested_page = request.args.get('page', '1') + + if requested_page.isnumeric(): + requested_page = int(requested_page) + else: + requested_page = 1 + photos = [] - paths = listdir(PHOTO_DIR) - for path in paths: + paths = sorted(listdir(PHOTO_DIR), reverse=True) + page = max(1, requested_page) + + first_index = (page - 1) * NUM_PHOTO_PER_PAGE + last_photo_index = page * NUM_PHOTO_PER_PAGE + + photos_to_show = paths[first_index:last_photo_index] + if len(photos_to_show) == 0 and len(paths) >= NUM_PHOTO_PER_PAGE: + photos_to_show = paths[0:NUM_PHOTO_PER_PAGE] + + for path in photos_to_show: + if not path.lower().endswith(('.png', '.jpg', '.jpeg')): + continue + + img = Image.open(os.path.join(PHOTO_DIR, path)) - print(img.filename) exif_data = img.getexif() wid, hgt = img.size - brand = exif_data[271] - model = exif_data[272] - photos.append(Photo(path, str(wid) + "x" + str(hgt),brand, model)) - return render_template("index.html", photos=photos, str=str) \ No newline at end of file + brand = exif_data.get(271, "Inconnu") + model = exif_data.get(272, "Inconnu") + + + photos.append(Photo(path, f"{wid}x{hgt}", brand, model)) + + nbr_page = len(paths) // NUM_PHOTO_PER_PAGE + if len(path) % NUM_PHOTO_PER_PAGE > 0: + nbr_page+=1 + + + return render_template("index.html", photos=photos, num_page=requested_page, nbr_page=nbr_page) \ No newline at end of file diff --git a/src/myalbum/static/styles/style.css b/src/myalbum/static/styles/style.css new file mode 100644 index 0000000..1731284 --- /dev/null +++ b/src/myalbum/static/styles/style.css @@ -0,0 +1,61 @@ +:root { + /* color-scheme: light dark; */ +} + +* { + font-family: "Roboto", sans-serif; +} + +main { + display: flex; + flex-direction: column; + align-items: center; + border: 1px solid black; + padding: 2rem; +} + +.pictures { + display: flex; + flex-wrap: wrap; + gap: 2rem; + justify-content: center; + width: 100%; +} + +.img-link { + display: flex; + flex-direction: column; + align-items: center; + text-decoration: none; + color: black; + width: calc((100% / 3) - 2rem); + transition: transform .2s; +} + +.img-link:hover { + transform: scale(1.05); +} + +.picture { + width: 100%; + height: auto; + object-fit: cover; +} + +.pagination { + display: flex; + justify-content: center; + gap: 1rem; +} + +@media screen and (max-width: 80rem) { + .img-link { + width: calc(50% - 2rem); + } +} + +@media screen and (max-width: 40rem) { + .img-link { + width: 100%; + } +} \ No newline at end of file diff --git a/src/myalbum/templates/index.html b/src/myalbum/templates/index.html index 1a45bea..64a9ab4 100644 --- a/src/myalbum/templates/index.html +++ b/src/myalbum/templates/index.html @@ -1,14 +1,54 @@ - + - - - - Document - - - {% for photo in photos %} - -

{{ str(photo) }}

- {% endfor %} - - \ No newline at end of file + + + + + Guams's album + + + +
+

Note : Toutes les personnes présentes sur les photos consentent à apparaître sur cette page

+
+ {% for photo in photos %} + + {{ photo.name }} +

{{ photo | string }}

+
+ {% endfor %} +
+ +
+ +