生成日历Python网页

时间:2011-09-13 05:00:55

标签: python calendar webpage

按主持人的建议重新措辞我的问题。

我需要创建一个Python和日历的日历。网页的CSS,我在Python中尝试了以下内容:

#!/usr/bin/env python

import os, re, sys, calendar  
from datetime import datetime 

myCal = calendar.monthcalendar(2011,9)
html += str(myCal)
mycal = myCal[:1]
cal1 = myCal[1:2]
cal2 = myCal[2:3]
cal3 = myCal[3:4]
cal4 = myCal[4:5]

html += str(mycal)+'<br>'
html += str(cal1)+'<br>'
html += str(cal2)+'<br>'
html += str(cal3)+'<br>'
html += str(cal4)+'<br>'
html += "<br>"

这是网页上的以下输出:

[[0, 0, 0, 1, 2, 3, 4]]<br>
[[5, 6, 7, 8, 9, 10, 11]]<br>
[[12, 13, 14, 15, 16, 17, 18]]<br>
[[19, 20, 21, 22, 23, 24, 25]]<br>
[[26, 27, 28, 29, 30, 0, 0]]<br>

我如何按以下格式安排上述内容? ( 这是一个SAMPLE格式,我还没有完成实际的日期/日期匹配。 格式需要两行 例如。日期
日期
imgN
日期
日期
下个月 )

                      Dec , 2011
----------------------------------------------------------------------------
sun    | mon   | tue   | wed thu fri sat sun mon tue wed thu fri sat sun
-------|-------|-------|----------------------------------------------------
.... 1 |.. 2 ..|.. 3 ..| 4 5 6 7 8 9 10 11 12 13 14 15<br>
------ |-------|-------|----------------------------------------------------
img1   | img2  | img3  | ....

                      Jan , 2012
----------------------------------------------------------------------------
sun    | mon   | tue   | wed thu fri sat sun mon tue wed thu fri sat sun
-------|-------|-------|----------------------------------------------------
.... 1 |.. 2 ..|.. 3 ..| 4 5 6 7 8 9 10 11 12 13 14 15<br>
------ |-------|-------|----------------------------------------------------
img1   | img2  | img3  | ....

                      Feb , 2012
----------------------------------------------------------------------------
sun    | mon   | tue   | wed thu fri sat sun mon tue wed thu fri sat sun
-------|-------|-------|----------------------------------------------------
.... 1 |.. 2 ..|.. 3 ..| 4 5 6 7 8 9 10 11 12 13 14 15<br>
------ |-------|-------|----------------------------------------------------
img1   | img2  | img3  | ....

2 个答案:

答案 0 :(得分:3)

我不确定你到底在寻找什么,这会产生一个包含你所描述的3行的表,但整个月(不仅仅是前15天)。我可能是起点

import calendar
import itertools

blank = "&nbsp;"

myCal = calendar.monthcalendar(2011,9)
day_names = itertools.cycle(['mon','tue','wed','thu','fri','sat','sun']) # endless list
cal = [day for week in myCal for day in week] # flatten list of lists

# empty lists to hold the data
headers = []
numbers = []
imgs = []

# fill lists
for d in cal:
    if d != 0:
        headers.append(day_names.next())
        numbers.append(d)
        imgs.append("image"+str(d))
    else:
        headers.append(day_names.next())
        numbers.append(blank)
        imgs.append(blank)

# format data
html = "<table><tr></tr>{0}<tr>{1}</tr><tr>{2}</tr></table>".format(
    "".join(["<td>%s</td>"% h for h in headers]),
    "".join(["<td>%s</td>"% n for n in numbers]),
    "".join(["<td>%s</td>"% i for i in imgs]))

答案 1 :(得分:1)

我不确定我是否理解您想要的确切格式,但您可以将日历放入3行表中。

每个月尝试一次

import calendar

myCal = calendar.monthcalendar(2011,9)


#make multi rowed month into a single row list
days = list()
for x in myCal:
    days.extend(x)


#match this up with the week names with enough weeks to cover the month
weeks = len(myCal) * ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat']

#some images
images = ['image1', 'image2', '...']

#make sure there is at least a zero at the end of the list
days.append(0)
#find start and end indexes where the actual day numbers lie
start_index = days.index(1)
#if there are no zeros at the end of the list this will fail
end_index = days[start_index:].index(0) + len(days) - len(days[start_index:])

header = 'Dec, 2011'
#Create the table rows of just the items between start_index and end_index.
weekday_row =  '<tr>%s</tr>'%(''.join(['<td>%s</td>'%(x) 
                                       for x in weeks[start_index:end_index]]))
day_row =  '<tr>%s</tr>'%(''.join(['<td>%d</td>'%(x) 
                                   for x in days[start_index:end_index]]))
image_row = '<tr>%s</tr>'%(''.join(['<td>%s</td>' % (x) for x in images]))


#finally put them all together to form your month block
html =  '<div>%s</div><table>\n\n%s\n\n%s\n\n%s</table>' % (header, 
                                                            weekday_row, 
                                                            day_row, 
                                                            image_row)

您可以根据需要重复多次