创建一个继承自HTMLCalendar类的新类。
覆盖formatday方法。
像“这个库没用”这样的评论显然不理解Python。
class EmployeeScheduleCalendar(HTMLCalendar):
def formatday(self, day, weekday):
"""
Return a day as a table cell.
"""
if day == 0:
return '<td class="noday"> </td>' # day outside month
else:
return '<td class="%s"><a href="%s">%d</a></td>' % (self.cssclasses[weekday], weekday, day)
日历模块在过去通常都没什么用,但是在2.5版本中引入了Calendar对象。虽然它不会为您渲染HTML日历,但它有大量的方法可以帮助您生成一个日历。
例如,monthdatescalendar(year, month)将给您提供一个月中所有周数的列表,其中每个周数又是七天的列表。因此,monthdatescalendar(2009, 7)将以 [[datetime.date(2009, 6, 29), datetime.date(2009, 6, 30),
开始,以 datetime.date(2009, 8, 1), datetime.date(2009, 8, 2)]]
结束。
有了这个,接下来生成所需的HTML变得非常容易。
不知道你具体想要实现什么,所以很难说,但是我有一个想法。
与其打印myCal.formatmonth(2009, 7),为什么不将其赋值给一个字符串呢。然后你可以用正则表达式来操作它。
这里有一个非常糟糕的示例:
import calendar
import re
myCal = calendar.HTMLCalendar(calendar.SUNDAY)
myStr = myCal.formatmonth(2009, 7)
re.sub('28', '28<br/>[My Data]', myStr)
print myStr
它能够实现你想要的功能,但是它看起来相当丑陋。
<br/> cool
添加到每个Tue td节点。import calendar
import xml.etree.ElementTree as etree
myCal = calendar.HTMLCalendar(calendar.SUNDAY)
htmlStr = myCal.formatmonth(2009, 7)
htmlStr = htmlStr.replace(" "," ")
root = etree.fromstring(htmlStr)
for elem in root.findall("*//td"):
if elem.get("class") != "tue":
continue
elem.text += "!"
br = etree.SubElement(elem, "br")
br.tail = "cool!"
print etree.tostring(root)
我还不知道你为什么需要生成HTML日历, 但根据你正在使用的需求和框架,有更好的方法来实现它。
from calendar import HTMLCalendar
today = datetime.today()
month = today.month
year = today.year
cal = HTMLCalendar()
cal.cssclasses = ["mon text-bold", "tue", "wed", "thu", "fri", "sat", "sun red"]
final_cal = cal.formatmonth(year, month)