如何動態(tài)創(chuàng)建Python中的HTML日歷
01
10 8
Introduction
Python'scalendar模塊是標(biāo)準(zhǔn)庫的一部分。它允許每月或每年輸出日歷,還提供其他與日歷相關(guān)的功能。
calendar模塊本身取決于datetime模塊。但我們稍后也需要datetime用于我們自己的目的,所以最好導(dǎo)入這兩個。另外,為了進行一些字符串分割,我們需要re模塊。讓's一次性導(dǎo)入它們。
默認(rèn)情況下,日歷從星期一(第0天)開始,按照歐洲公約,以星期日(第6天)結(jié)束。如果您更喜歡星期天作為一周的第一天,請使用setfirstweekday()方法將默認(rèn)值更改為第6天,如下所示:
要在兩者之間切換,可以使用sys模塊將一周的第一天作為參數(shù)傳遞。然后,您將使用if語句檢查該值,并相應(yīng)地設(shè)置setfirstweekday()方法。
02
of 10
準(zhǔn)備一年中的月份
在我們的日歷中,最好有一個日歷的標(biāo)題,它可以讀取"Python生成的日歷…"并具有當(dāng)前的月份和年份。為了做到這一點,我們需要從系統(tǒng)中獲取月份和年份。此功能是calendar提供的功能,Python可以檢索月份和年份。但我們?nèi)匀挥袉栴}。由于所有系統(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)我們獲得一個月的數(shù)量時,我們可以訪問列表中的該數(shù)字(減1)并獲得完整的月份名稱。
03
of 10
一天叫做"今天"
啟動main()函數(shù),讓's askdatetime為該時間。
奇怪的是,datetime模塊具有datetime類。正是從這個類中,我們調(diào)用兩個對象:now()和date()。方法datetime.datetime.now()返回包含以下信息的對象:年份,月份,日期,小時,分鐘,秒和微秒。當(dāng)然,我們不需要時間信息。為了單獨剔除日期信息,我們將now()的結(jié)果傳遞給datetime.datetime.date()作為論據(jù)。結(jié)果是today現(xiàn)在包含由em破折號分隔的年份,月份和日期。
04
143 of 10 144分割當(dāng)前日期
為了將這些數(shù)據(jù)分解成更多可管理的部分,我們必須將其拆分。然后,我們可以分別將這些部分分配給變量當(dāng)前年,當(dāng)前月和當(dāng)前日。
要了解此代碼的第一行,請從右到左以及從內(nèi)到外進行操作。首先,我們將對象today嚴(yán)格化,以便將其作為字符串進行操作。然后,我們使用em破折號作為分隔符或令牌對其進行拆分寧夏區(qū)情常識。最后,我們將這三個值分配為列表'當(dāng)前'。
為了更清楚地處理這些值并在year中調(diào)用當(dāng)前月份的長名稱,我們將月份編號分配給current?no。然后我們可以做一些分在year的下標(biāo)中進行操作,并將月份名稱分配給當(dāng)前?month。
在下一行中,需要進行一些替換。從datetime返回的日期即使在本月的前九天也是兩位數(shù)值。零可以作為持有者,但我們寧愿我們的日歷只有一位數(shù)字。因此,我們不為以字符串開頭的每個零替換任何值(因此'\ a')。最后,我們將年份分配給當(dāng)前年份,并將其轉(zhuǎn)換為一個整數(shù)。
我們稍后調(diào)用的方法將需要以整數(shù)格式輸入。因此,確保所有日期數(shù)據(jù)都以整數(shù)而非字符串形式保存非常重要。
05
of 10
HTML和CSS前言
在打印日歷之前,我們需要打印日歷的HTML前言和CSS布局。請訪問此頁面以獲取代碼,以打印日歷的CSS和HTML前言。并將代碼復(fù)制到程序文件中。該文件HTML中的CSS遵循Jennifer Kyrnin提供的關(guān)于Web設(shè)計指南的模板。如果您不了解代碼的這一部分,您可能需要咨詢她對學(xué)習(xí)CSS和HTML的幫助。最后,要自定義月份名稱,我們需要以下行:
打印'06
of 10
打印一周中的幾天
現(xiàn)在基本布局是輸出的,我們可以自己設(shè)置日歷。日歷,在其最基本的一點,是一個表格。所以讓我們在HTML中制作一個表格:
07
222 of 10 223獲取日歷數(shù)據(jù)
現(xiàn)在我們需要創(chuàng)建實際日歷。要獲取實際日歷數(shù)據(jù),我們需要calendar模塊'smonthcalendar()方法。這種方法需要兩個參數(shù):所需日歷的年份和月份(均為整數(shù)形式)。它返回一個列表,其中包含每月日期的列表。因此,如果我們計算返回值中的項目數(shù)量,我們將在給定月份中計算周數(shù)。
08
of 10
一個月內(nèi)的周數(shù)
知道月份中的周數(shù),我們可以為創(chuàng)建一個循環(huán),該循環(huán)通過從0到周數(shù)的range()計數(shù)。就像它一樣,它將打印出日歷的其余部分。
我們將在下一頁逐行討論此代碼。
09
of 10
The'for'檢查循環(huán)
在此范圍開始后,根據(jù)柜臺的價值從月中剔除一周的日期,并分配給周。然后,創(chuàng)建一個表格行來保存日歷日期。
一個for循環(huán)然后貫穿一周中的幾天,以便可以對其進行分析。calendar模塊為表中沒有有效值的每個日期打印a'0'。為了我們的目的,空白值會更好地工作,所以我們打印表格數(shù)據(jù)的工作簿而沒有這些日期的值。
接下來,如果當(dāng)天是當(dāng)前的一天,我們應(yīng)該以某種方式突出顯示它?;?strong>tdclasstoday,此頁面的CSS將導(dǎo)致當(dāng)前日期在暗背景下呈現(xiàn),而不是其他日期的淺背景。
最后,如果日期是有效值而不是當(dāng)前日期,則將其打印為表格數(shù)據(jù)。這些的確切顏色組合在CSS風(fēng)格的序言中進行。
第一個for循環(huán)的最后一行關(guān)閉該行。打印日歷后,我們的任務(wù)就完成了,我們可以關(guān)閉HTML文檔。
10
302 of 10 303調(diào)用主()函數(shù)
由于所有這些代碼都在main()函數(shù)中,請不要忘記調(diào)用它。
只有這個簡單的日歷可以以任何需要日歷表示的方式使用。通過超鏈接HTML中的日期,可以輕松創(chuàng)建日記功能?;蛘?,可以檢查日記文件,然后反映哪些日期是由它們的顏色采取的?;蛘撸绻麑⒋顺绦蜣D(zhuǎn)換為CGI腳本,則可以動態(tài)生成它。
當(dāng)然,這只是日歷模塊和#39;功能的概述。該文檔提供了更全面的視圖。