Skapa en HTML-kalender i Python dynamiskt

Pythons kalender modulen är en del av standardbiblioteket. Det tillåter utgången av en kalender per månad eller år och ger också annan kalenderrelaterad funktionalitet.

De kalender själva modulen beror på datetime-modulen. Men vi kommer också att behöva datum Tid för våra egna ändamål senare, så det är bäst att importera båda dessa. För att göra lite strängdelning behöver vi också re modul. Låt oss importera dem alla på en gång.

Som standard börjar kalendrarna veckan med måndag (dag 0) per den europeiska konferensen och slutar med söndag (dag 6). Om du föredrar söndag som den första veckodagen, använd setfirstweekday () metod för att ändra standard till dag 6 enligt följande:

Om du vill växla mellan de två kan du passera den första veckodagen som ett argument med hjälp av sys modul. Du skulle sedan kontrollera värdet med en om uttalande och ställa in setfirstweekday () metod därefter.

I vår kalender skulle det vara trevligt att ha en rubrik för kalendern som läser något som "En Python-genererad kalender för ..." och har den aktuella månaden och året. För att göra detta måste vi hämta månad och år från systemet. Den här funktionen är något som

instagram viewer
kalender ger, kan Python hämta månad och år. Men vi har fortfarande ett problem. Eftersom alla systemdatum är numeriska och inte innehåller obegränsade eller icke-numeriska former av månaderna, behöver vi en lista med de månaderna. Gå in i listan år.

När vi får numret på en månad kan vi komma åt det numret (minus ett) i listan och få hela månadens namn.

Märkligt nog datum Tid modulen har en datum Tid klass. Det är från denna klass vi kallar två objekt: nu() och datum(). Metoden datetime.datetime.now () returnerar ett objekt som innehåller följande information: år, månad, datum, timme, minut, sekund och mikrosekunder. Naturligtvis har vi inget behov av tidsinformation. För att utesluta datuminformationen skickar vi resultaten av nu() till datetime.datetime.date () som ett argument. Resultatet är det i dag innehåller nu år, månad och datum separerade med em-streck.

För att dela upp denna bit i mer hanterbara delar måste vi dela upp den. Vi kan sedan tilldela delarna till variablerna current_yr, denna månad, och nuvarande dag respektive.

För att förstå den första raden i denna kod, arbeta från höger till vänster och från insidan och utåt. Först stränger vi objektet i dag för att fungera som en sträng. Sedan delade vi upp det med hjälp av em-streck som en avgränsare eller token. Slutligen tilldelar vi dessa tre värden som en lista till 'aktuell'.

För att hantera dessa värden mer tydligt och för att kalla det långa namnet på den aktuella månaden ut ur år, tilldelar vi månadens nummer till current_no. Vi kan sedan göra lite subtraktion i prenumerationen av år och tilldela månadens namn till denna månad.

I nästa rad krävs lite utbyte. Datum som returneras från datum Tid är ett tvåsiffrigt värde även under de första nio dagarna i månaden. En noll fungerar som platshållare, men vi vill hellre att vår kalender bara har den enda siffran. Så vi ersätter inget värde för varje noll som börjar en sträng (därav '\ A'). Slutligen tilldelar vi året till current_yr, konvertera det till ett heltal längs vägen.

Metoder som vi kommer att anropa senare kommer att kräva inmatning i heltalformat. Därför är det viktigt att se till att alla datumdata sparas i heltal, inte i strängform.

Innan vi skriver ut kalendern måste vi skriva uthtml ingress och CSS-layout för vår kalender. Gå till den här sidan för koden för att skriva ut CSS- och HTML-ingressen för kalendern. och kopiera koden till din programfil. CSS i HTML-filen för denna fil följer mallen som erbjuds av Jennifer Kyrnin, About's Guide to Web Design. Om du inte förstår denna del av koden kanske du vill konsultera hennes hjälp för att lära sig CSS och HTML. Slutligen, för att anpassa månadens namn, behöver vi följande rad:

Nu när den grundläggande layouten är utmatad kan vi ställa in själva kalendern. En kalender, vid dess mest grundläggande punkt, är en tabell. Så låt oss skapa en tabell i vår HTML:

Nu måste vi skapa den faktiska kalendern. För att få faktiska kalenderdata behöver vi kalender modulens monthcalendar () metod. Den här metoden tar två argument: året och månaden för den önskade kalendern (båda i heltal). Den returnerar en lista som innehåller listor över datum för månad efter vecka. Så om vi räknar antalet artiklar i det returnerade värdet har vi antalet veckor i den givna månaden.

Genom att veta antalet veckor i månaden kan vi skapa en för slinga som räknas genom a räckvidd() från 0 till antalet veckor. Som det gör kommer det att skriva ut resten av kalendern.

När detta intervall har startats tas veckans datum in från månad beroende på räknarens värde och tilldelas vecka. Sedan skapas en tabellrad för att hålla kalenderdatum.

EN för loop går sedan igenom veckodagarna så att de kan analyseras. De kalender modulen skriver ut en '0' för varje datum i tabellen som inte har ett giltigt värde. Ett tomt värde skulle fungera bättre för våra ändamål, så vi skriver ut bokhyllorna med tabelluppgifter utan ett värde för dessa datum.

Nästa dag, om dagen är den aktuella, bör vi markera den på något sätt. Baserat på td klass i dag, CSS på denna sida kommer att göra att det aktuella datumet återges mot en mörk bakgrund istället för den ljusa bakgrunden för de andra datumen.

Slutligen, om datumet är ett giltigt värde och inte är det aktuella datumet, skrivs det ut som tabelldata. De exakta färgkombinationerna för dessa finns i CSS-stilens ingress.

Just denna enkla kalender kan användas på vilket sätt som helst som behöver en kalenderrepresentation. Genom att hyperlänka datumen i HTML kan man enkelt skapa en dagboksfunktion. Alternativt kan man kontrollera mot en dagbokfil och sedan spegla vilka datum som tas efter deras färg. Eller om man konverterar detta program till ett CGI-skript, kan man få det genererat i farten.