如何動(dòng)態(tài)創(chuàng)建Python中的HTML日歷

01

10 8

Introduction

Python'scalendar模塊是標(biāo)準(zhǔn)庫(kù)的一部分。它允許每月或每年輸出日歷,還提供其他與日歷相關(guān)的功能。

calendar模塊本身取決于datetime模塊。但我們稍后也需要datetime用于我們自己的目的,所以最好導(dǎo)入這兩個(gè)。另外,為了進(jìn)行一些字符串分割,我們需要re模塊。讓's一次性導(dǎo)入它們。

默認(rèn)情況下,日歷從星期一(第0天)開(kāi)始,按照歐洲公約,以星期日(第6天)結(jié)束。如果您更喜歡星期天作為一周的第一天,請(qǐng)使用setfirstweekday()方法將默認(rèn)值更改為第6天,如下所示:

要在兩者之間切換,可以使用sys模塊將一周的第一天作為參數(shù)傳遞。然后,您將使用if語(yǔ)句檢查該值,并相應(yīng)地設(shè)置setfirstweekday()方法。

02

of 10

準(zhǔn)備一年中的月份

在我們的日歷中,最好有一個(gè)日歷的標(biāo)題,它可以讀取"Python生成的日歷…"并具有當(dāng)前的月份和年份。為了做到這一點(diǎn),我們需要從系統(tǒng)中獲取月份和年份。此功能是calendar提供的功能,Python可以檢索月份和年份。但我們?nèi)匀挥袉?wèn)題。由于所有系統(tǒng)日期均為數(shù)字,不包含月份的未經(jīng)修改或非數(shù)字形式,因此我們需要列出這些月份。輸入列表

年=[&\\35; 39;1月\##39;,
&\35; 39;2月\#39;,
&\35; 35;#39;,
'4月\\#39;
67>67>67>年.39;1月\35;#39;39;
&\\##39;39;39;2月&\##39;#39;,
'8月',
'9月',
'10月',
'11月',
'12月']

現(xiàn)在,當(dāng)我們獲得一個(gè)月的數(shù)量時(shí),我們可以訪問(wèn)列表中的該數(shù)字(減1)并獲得完整的月份名稱(chēng)。

03

of 10

一天叫做"今天"

啟動(dòng)main()函數(shù),讓's askdatetime為該時(shí)間。

奇怪的是,datetime模塊具有datetime類(lèi)。正是從這個(gè)類(lèi)中,我們調(diào)用兩個(gè)對(duì)象:now()date()。方法datetime.datetime.now()返回包含以下信息的對(duì)象:年份,月份,日期,小時(shí),分鐘,秒和微秒。當(dāng)然,我們不需要時(shí)間信息。為了單獨(dú)剔除日期信息,我們將now()的結(jié)果傳遞給datetime.datetime.date()作為論據(jù)。結(jié)果是today現(xiàn)在包含由em破折號(hào)分隔的年份,月份和日期。

教育資源網(wǎng)_1

04

143 of 10 144

分割當(dāng)前日期

為了將這些數(shù)據(jù)分解成更多可管理的部分,我們必須將其拆分。然后,我們可以分別將這些部分分配給變量當(dāng)前年,當(dāng)前月當(dāng)前日。

要了解此代碼的第一行,請(qǐng)從右到左以及從內(nèi)到外進(jìn)行操作。首先,我們將對(duì)象today嚴(yán)格化,以便將其作為字符串進(jìn)行操作。然后,我們使用em破折號(hào)作為分隔符或令牌對(duì)其進(jìn)行拆分寧夏區(qū)情常識(shí)。最后,我們將這三個(gè)值分配為列表'當(dāng)前'。

為了更清楚地處理這些值并在year中調(diào)用當(dāng)前月份的長(zhǎng)名稱(chēng),我們將月份編號(hào)分配給current?no。然后我們可以做一些分在year的下標(biāo)中進(jìn)行操作,并將月份名稱(chēng)分配給當(dāng)前?month

在下一行中,需要進(jìn)行一些替換。從datetime返回的日期即使在本月的前九天也是兩位數(shù)值。零可以作為持有者,但我們寧愿我們的日歷只有一位數(shù)字。因此,我們不為以字符串開(kāi)頭的每個(gè)零替換任何值(因此'\ a')。最后,我們將年份分配給當(dāng)前年份,并將其轉(zhuǎn)換為一個(gè)整數(shù)。

我們稍后調(diào)用的方法將需要以整數(shù)格式輸入。因此,確保所有日期數(shù)據(jù)都以整數(shù)而非字符串形式保存非常重要。

05

of 10

HTML和CSS前言

在打印日歷之前,我們需要打印日歷的HTML前言和CSS布局。請(qǐng)?jiān)L問(wèn)此頁(yè)面以獲取代碼,以打印日歷的CSS和HTML前言。并將代碼復(fù)制到程序文件中。該文件HTML中的CSS遵循Jennifer Kyrnin提供的關(guān)于Web設(shè)計(jì)指南的模板。如果您不了解代碼的這一部分,您可能需要咨詢(xún)她對(duì)學(xué)習(xí)CSS和HTML的幫助。最后,要自定義月份名稱(chēng),我們需要以下行:

打印'

06

of 10

打印一周中的幾天

現(xiàn)在基本布局是輸出的,我們可以自己設(shè)置日歷。日歷,在其最基本的一點(diǎn),是一個(gè)表格。所以讓我們?cè)贖TML中制作一個(gè)表格:

07

222 of 10 223

獲取日歷數(shù)據(jù)

現(xiàn)在我們需要?jiǎng)?chuàng)建實(shí)際日歷。要獲取實(shí)際日歷數(shù)據(jù),我們需要calendar模塊'smonthcalendar()方法。這種方法需要兩個(gè)參數(shù):所需日歷的年份和月份(均為整數(shù)形式)。它返回一個(gè)列表,其中包含每月日期的列表。因此,如果我們計(jì)算返回值中的項(xiàng)目數(shù)量,我們將在給定月份中計(jì)算周數(shù)。

08

of 10

一個(gè)月內(nèi)的周數(shù)

知道月份中的周數(shù),我們可以為創(chuàng)建一個(gè)循環(huán),該循環(huán)通過(guò)從0到周數(shù)的range()計(jì)數(shù)。就像它一樣,它將打印出日歷的其余部分。

我們將在下一頁(yè)逐行討論此代碼。

09

of 10

The'for'檢查循環(huán)

在此范圍開(kāi)始后,根據(jù)柜臺(tái)的價(jià)值從中剔除一周的日期,并分配給。然后,創(chuàng)建一個(gè)表格行來(lái)保存日歷日期。

一個(gè)for循環(huán)然后貫穿一周中的幾天,以便可以對(duì)其進(jìn)行分析。calendar模塊為表中沒(méi)有有效值的每個(gè)日期打印a'0'。為了我們的目的,空白值會(huì)更好地工作,所以我們打印表格數(shù)據(jù)的工作簿而沒(méi)有這些日期的值。

接下來(lái),如果當(dāng)天是當(dāng)前的一天,我們應(yīng)該以某種方式突出顯示它?;?strong>tdclasstoday,此頁(yè)面的CSS將導(dǎo)致當(dāng)前日期在暗背景下呈現(xiàn),而不是其他日期的淺背景。

最后,如果日期是有效值而不是當(dāng)前日期,則將其打印為表格數(shù)據(jù)。這些的確切顏色組合在CSS風(fēng)格的序言中進(jìn)行。

第一個(gè)for循環(huán)的最后一行關(guān)閉該行。打印日歷后,我們的任務(wù)就完成了,我們可以關(guān)閉HTML文檔。

10

302 of 10 303

調(diào)用主()函數(shù)

由于所有這些代碼都在main()函數(shù)中,請(qǐng)不要忘記調(diào)用它。

只有這個(gè)簡(jiǎn)單的日歷可以以任何需要日歷表示的方式使用。通過(guò)超鏈接HTML中的日期,可以輕松創(chuàng)建日記功能?;蛘?,可以檢查日記文件,然后反映哪些日期是由它們的顏色采取的?;蛘?,如果將此程序轉(zhuǎn)換為CGI腳本,則可以動(dòng)態(tài)生成它。

當(dāng)然,這只是日歷模塊和#39;功能的概述。該文檔提供了更全面的視圖。