календарь python.HTMLCalendar

Я думаю, что я хочу использовать Python, встроенный в модуль календаря, чтобы создать календарь HTML с данными. Я говорю, что думаю, потому что я, вероятно, подумаю о лучшем пути, но сейчас он немного личный. Я не знаю, было ли это предназначено для использования таким образом, но кажется, что это немного бессмысленно, если вы можете хотя бы превратить дни в<a hrefs>.

Это устанавливает календарь на этот месяц с воскресеньем в качестве первого дня.

import calendar
myCal = calendar.HTMLCalendar(calendar.SUNDAY)
print myCal.formatmonth(2009, 7)

это печатает

<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

Я хотел бы вставить некоторые данные в объект HTMLCalendar до того, как он отобразит строку html. Я просто не могу понять, как.

Например

<td class="tue">28<br />[my data]</td>
 Anurag Uniyal10 июл. 2009 г., 18:25
IMO они должны удалить HTMLCalendar в любом случае, это не HTML-библиотека, и почему бы не RTFCalendar или PDDFCalendar, модуль календаря должен генерировать простой календарь, он должен быть на усмотрение пользователя, чтобы сделать его,
 Kenny Pyatt09 июл. 2009 г., 19:48
Казалось бы, объект HTMLCalendar не является изменяемым и довольно бесполезным ... Это другие вещи в объекте календаря, которые полезны, но не HTMLCalendar. Грустно на самом деле.

Ответы на вопрос(5)

Решение Вопроса

который кажется правильным XMl, в дерево 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)

Я еще не знаю, зачем вам нужно создавать HTML-календарь, но есть более эффективные способы сделать это в зависимости от потребностей и используемой вами структуры.

 10 июл. 2009 г., 05:21
это веб-приложение или настольное приложение? если рабочий стол какой фреймворк? а зачем вам html в таком случае? если в Интернете есть лучшие элементы управления html календаря.
 10 июл. 2009 г., 05:22
и да, вы можете использовать мой метод для изменения вывода HTML календаря, который был вашим вопросом, так что вы можете принять это как ответ :)
 Kenny Pyatt09 июл. 2009 г., 19:45
Конечная цель - менеджер по планированию сотрудников. Я, вероятно, не собираюсь использовать модуль календаря. Я прочитал исходный код на Python, и он не допускает никаких изменений. Он просто печатает таблицу HTML. Кажется совершенно бесполезным для меня. Похоже, ваш метод будет работать.

Переопределите метод 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)
 08 авг. 2013 г., 21:54
Я не вижу ничего, что вы не могли бы сделать с удивительным языком Python и стандартной библиотекой календарей. +1
 30 окт. 2018 г., 07:10
Хороший трюк при создании подклассов ... вы всегда можете вызвать исходную функцию, если это необходимо, используяsuperпоэтому вам никогда не придется переписывать исходный код функции.I made an HTML calendar that highlights certain days...

не зная точно, чего вы пытаетесь достичь, но вот одна из идей.

Вместо того, чтобы печатать 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

Он делает то, что вы хотите, но довольно уродливо.

 Kenny Pyatt09 июл. 2009 г., 19:46
Я действительно написал что-то подобное в своем разочаровании от объекта.
 09 июл. 2009 г., 04:45
Я добавил пример, но это, вероятно, худший способ сделать это. Вы используете веб-фреймворк для этого проекта? Ваша структура может включать лучший способ сделать календари.
 Kenny Pyatt09 июл. 2009 г., 04:41
в конечном итоге цель состоит в том, чтобы извлечь данные из mysql и вставить их в календарь. Есть десятки способов сделать это, и я подумал: «Привет, питон включает батареи» поэтому я искал что-то, что сделало HTML-календари. Я нашел объект calendar.HTMLCalendar. Похоже, он просто не хочет, чтобы вы загружали в каландр какую-либо информацию. Так что это стало немного личным.

чтобы делать все, что вы хотите, например:http://journal.uggedal.com/creating-a-flexible-monthly-calendar-in-django/

Если вы обратитесь к документации по HTMLCalendar (http://svn.python.org/view/python/branches/release27-maint/Lib/calendar.py?view=markup), вы увидите, что метод formatday () это очень просто. Просто измените его, как в приведенном выше примере, чтобы сделать все, что вам нравится. Так что HTMLCalendar не так уж и бессмысленен. ;)

 Kenny Pyatt06 апр. 2011 г., 23:42
Способ воскресить старый пост!

но в версии 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.

 Kenny Pyatt09 июл. 2009 г., 19:44
Это хороший момент.
 09 июл. 2009 г., 20:13
Да, так что проголосуй! :-) Хочу 10 баллов! :-D
 07 мар. 2012 г., 23:26
И сегодня я получил десять очков! Хех! :-)

Ваш ответ на вопрос