python calendar.HTMLCalendar

Ken*_*att 6 html python calendar

我想我想使用日历模块中内置的pythons来创建带有数据的HTML日历.我说我想是因为我可能会想到一个更好的方法,但现在它有点个人化了.我不知道这是否打算以这种方式使用,但如果你不能至少把这些日子变成一个,那似乎有点无意义<a hrefs>.

这将设置本月的日历,以星期日为第一天.

import calendar
myCal = calendar.HTMLCalendar(calendar.SUNDAY)
print myCal.formatmonth(2009, 7)
Run Code Online (Sandbox Code Playgroud)

它打印

<table border="0" cellpadding="0" cellspacing="0" class="month">\n<tr>
<th colspan="7" class="month">July 2009</th></tr>\n<tr><th class="sun">Sun</th>
<th class="mon">Mon</th><th class="tue">Tue</th><th class="wed">Wed</th>
<th class="thu">Thu</th><th class="fri">Fri</th><th class="sat">Sat</th></tr>\n
<tr><td class="noday">&nbsp;</td><td class="noday">&nbsp;</td>
<td class="noday">&nbsp;</td><td class="wed">1</td><td class="thu">2</td><td class="fri">3</td>
<td class="sat">4</td></tr>\n<tr><td class="sun">5</td><td class="mon">6</td><td class="tue">7</td>
<td class="wed">8</td><td class="thu">9</td><td class="fri">10</td>
<td class="sat">11</td></tr>\n<tr><td class="sun">12</td><td class="mon">13</td>
<td class="tue">14</td><td class="wed">15</td><td class="thu">16</td><td class="fri">17</td>
<td class="sat">18</td></tr>\n<tr><td class="sun">19</td><td class="mon">20</td>
<td class="tue">21</td><td class="wed">22</td><td class="thu">23</td><td class="fri">24</td>
<td class="sat">25</td></tr>\n<tr><td class="sun">26</td><td class="mon">27</td>
<td class="tue">28</td><td class="wed">29</td><td class="thu">30</td><td class="fri">31</td>
<td class="noday">&nbsp;</td></tr>\n</table>\n
Run Code Online (Sandbox Code Playgroud)

我想在呈现html字符串之前将一些数据插入到HTMLCalendar对象中.我只是无法弄清楚如何.

例如

<td class="tue">28<br />[my data]</td>
Run Code Online (Sandbox Code Playgroud)

小智 41

创建一个继承自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">&nbsp;</td>' # day outside month
        else:
            return '<td class="%s"><a href="%s">%d</a></td>' % (self.cssclasses[weekday], weekday, day)
Run Code Online (Sandbox Code Playgroud)

  • 我看不到任何你用惊人的python语言和标准日历库无法做到的事情.+1 (2认同)

Len*_*bro 16

日历模块通常没用,但在2.5中它引入了Calendar对象.这不会为您呈现HTML日历,但它有许多方法可以帮助您呈现日历.

例如,monthdatescalendar(年,月)将为您提供当月所有周的列表,其中每周依次为七天的列表.所以monthdatescalendar(2009,7)将以#开头[[datetime.date(2009, 6, 29), datetime.date(2009, 6, 30),并结束datetime.date(2009, 8, 1), datetime.date(2009, 8, 2)]]

有了这个,生成所需的HTML就变得微不足道了.


Anu*_*yal 0

您可以将看似有效的 XMl 的 html 加载到 XML 树中,修改它并再次输出它。例如,这会添加<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("&nbsp;"," ")

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)
Run Code Online (Sandbox Code Playgroud)

我还不知道为什么您需要生成 HTML 日历,但根据需要和您使用的框架,有更好的方法可以做到这一点。

  • 最终目标是员工调度经理。我可能不会使用日历模块。我阅读了它的Python源代码,它不允许任何修改。它只是打印一个 HTML 表格。对我来说似乎完全没用。看来你的方法可行。 (2认同)