Lag en HTML-kalender i Python dynamisk

Pythons kalender modulen er en del av standardbiblioteket. Den tillater produksjonen av en kalender etter måned eller år, og gir også annen, kalenderrelatert funksjonalitet.

De kalender Selve modulen avhenger av datetime-modulen. Men vi vil også trenge dato tid for våre egne formål senere, så det er best å importere begge disse. For å gjøre noen strengdeling, trenger vi også re modul. La oss importere dem på én gang.

Som standard begynner kalenderne uken med mandag (dag 0), per den europeiske stevnet, og slutter med søndag (dag 6). Hvis du foretrekker søndag som den første dagen i uken, bruk setfirstweekday () metode for å endre standard til dag 6 som følger:

For å veksle mellom de to, kan du passere den første dagen i uken som et argument ved å bruke sys modul. Du vil da sjekke verdien med en hvis uttalelse og sett setfirstweekday () metode deretter.

I kalenderen vår ville det være fint å ha en overskrift for kalenderen som leser noe som "En Python-generert kalender for ..." og har gjeldende måned og år. For å gjøre dette, må vi få måned og år fra systemet. Denne funksjonaliteten er noe av det

instagram viewer
kalender gir, kan Python hente ut måned og år. Men vi har fortsatt et problem. Siden alle systemdatoer er numeriske og ikke inneholder uforbeholdne eller ikke-numeriske former for månedene, trenger vi en liste over disse månedene. Gå inn i listen år.

Når vi nå får nummeret på en måned, kan vi få tilgang til det tallet (minus en) på listen og få hele månedsnavnet.

Merkelig nok dato tid modulen har en dato tid klasse. Det er fra denne klassen vi kaller to objekter: nå() og Dato(). Metoden datetime.datetime.now () returnerer et objekt som inneholder følgende informasjon: år, måned, dato, time, minutt, sekund og mikrosekunder. Vi har selvfølgelig ikke behov for tidsinformasjon. For å kaste ut datoinformasjonen alene, passerer vi resultatene av nå() til datetime.datetime.date () som et argument. Resultatet er det i dag inneholder nå år, måned og dato atskilt med em-streker.

For å dele denne biten av data i mer håndterbare stykker, må vi dele den opp. Vi kan deretter tilordne delene til variablene current_yr, denne måneden, og current_day henholdsvis.

For å forstå den første linjen i denne koden, jobber du fra høyre til venstre og fra innsiden og utover. Først strenger vi objektet i dag for å operere på den som en streng. Deretter deler vi det ved å bruke em-dashen som en avgrenser, eller token. Til slutt tildeler vi disse tre verdiene som en liste til 'nåværende'.

For å takle disse verdiene mer tydelig og kalle det lange navnet på den aktuelle måneden ut av år, tildeler vi månedens nummer til current_no. Vi kan da gjøre litt subtraksjon i abonnementet til år og tilordne månedsnavnet til denne måneden.

I den neste linjen trengs det litt erstatning. Datoen som returneres fra kl dato tid er en tosifret verdi selv for de første ni dagene av måneden. En null fungerer som en plassholder, men vi vil helst at kalenderen vår bare har det enkeltstående sifferet. Så vi erstatter ingen verdi for hver null som begynner en streng (derav '\ A'). Til slutt tildeler vi året til current_yr, konvertere det til et helt tall underveis.

Metoder som vi vil kalle senere vil kreve innspill i heltallformat. Derfor er det viktig å sikre at alle datodataene lagres i heltall, ikke strengform.

Før vi skriver ut kalenderen, må vi skrive utHTML ingress og CSS-layout for kalenderen vår. Gå til denne siden for kode for å skrive ut CSS- og HTML-ingressen for kalenderen. og kopier koden til programfilen. CSS i HTML for denne filen følger malen som tilbys av Jennifer Kyrnin, About's Guide to Web Design. Hvis du ikke forstår denne delen av koden, kan det være lurt å oppsøke hjelpene hennes for å lære CSS og HTML. Til slutt, for å tilpasse månedsnavnet, trenger vi følgende linje:

Nå som grunnleggende layout er skrevet ut, kan vi sette opp kalenderen. En kalender, på det mest grunnleggende punktet, er en tabell. Så la oss lage en tabell i HTML:

Nå må vi lage den faktiske kalenderen. For å få de faktiske kalenderdataene, trenger vi kalender modulens monthcalendar () metode. Denne metoden tar to argumenter: året og måneden for ønsket kalender (begge i heltallform). Den returnerer en liste som inneholder lister over datoene for måneden etter uke. Så hvis vi teller antall varer i den returnerte verdien, har vi antall uker i den gitte måneden.

Når vi vet antall uker i måneden, kan vi lage en til sløyfe som teller gjennom a område() fra 0 til antall uker. Som den gjør, vil den skrive ut resten av kalenderen.

Etter at dette området er startet, blir ukens datoer fjernet fra måned i henhold til tellerens verdi og tilordnet uke. Deretter opprettes en tabellrad for å holde kalenderdatoer.

EN til loop går deretter gjennom ukedagene slik at de kan analyseres. De kalender modulen skriver ut en '0' for hver dato i tabellen som ikke har en gyldig verdi. En tom verdi vil fungere bedre for vårt formål, så vi skriver ut bokhyllene med tabelldata uten en verdi for disse datoene.

Neste dag, hvis dagen er den nåværende, bør vi fremheve den på en eller annen måte. Basert på td klasse i dag, vil CSS på denne siden føre til at gjeldende dato blir gjengitt mot en mørk bakgrunn i stedet for den lyse bakgrunnen til de andre datoene.

Til slutt, hvis datoen er en gyldig verdi og ikke er den gjeldende datoen, skrives den ut som tabelldata. De nøyaktige fargekombinasjonene for disse holdes i ingressen til CSS-stilen.

Bare denne enkle kalenderen kan brukes på alle måter som trenger en kalenderrepresentasjon. Ved å hyperkobling av datoene i HTML, kan man enkelt lage en dagbokfunksjonalitet. Alternativt kan man sjekke mot en dagbokfil og deretter reflektere hvilke datoer som blir tatt etter fargen deres. Eller, hvis man konverterer dette programmet til et CGI-skript, kan man få det generert i farta.