В Питоне функции для этого нет. То есть, конечно, есть функция formatmonth из стандартного модуля calendar, но она делает календарик без ссылок. А мне надо именно со ссылками.
В интернете есть много разных вариантов календариков, разной степени навороченности. Но все они какие-то уж слишком навороченные.
Для меня самым лучшим вариантом оказалось написание своей функции.
Она форматирует календарик в виде HTML-таблицы и подсвечивает текущий день. Точнее, она добавляет к ячейке с текущей датой специальный CSS-класс, а "подсвечивать" придётся вам, в CSS вашего сайта.
Функция самостоятельно импортирует всё необходимое (функцию formatmonth из модуля calendar).
Нужно лишь вызвать её, например вот так:
format_month_in_html(2008, 7, 15)
А, чуть не забыл, вот сама функция:
# -*- coding: utf-8 -*-
def format_month_in_html(year, month, day):
'''
Форматирует HTML-календарь со ссылками.
Принимает в качестве аргументов год (year), месяц (month) и день (day).
'''
# Названия месяцев
_month_names = ['',
u'Январь',
u'Февраль',
u'Март',
u'Апрель',
u'Май',
u'Июнь',
u'Июль',
u'Август',
u'Сентябрь',
u'Октябрь',
u'Ноябрь',
u'Декабрь'
]
# Названия дней недели и их CSS-классы
_days_names = [# ('День_недели', 'CSS-класс'),
(u'Пн', 'mon'),
(u'Вт', 'tue'),
(u'Ср', 'wed'),
(u'Чт', 'thu'),
(u'Пт', 'fri'),
(u'Сб', 'sat'),
(u'Вс', 'sun')
]
year = int("%04i" % year)
month = int("%02i" % month)
smonth = int("%01i" % month)
day = int("%02i" % day)
sday = int("%01i" % day)
from calendar import monthcalendar
matrix = monthcalendar(year, month)
pre_str = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"month\">"
pre_str += "<tr><th colspan=\"7\" class=\"month\">" + _month_names[smonth] + "</th></tr>"
pre_str += "<tr>"
for day_name, class_name in _days_names:
pre_str += "<th class=\"%s\">%s</th>" % (class_name, day_name)
pre_str += "</tr>"
for list in matrix:
pre_str += "<tr>"
for nday in list:
if nday == 0:
pre_str += "<td class=\"cld noday\"> </td>"
elif nday == sday:
pre_str += "<td class=\"cld ac-\">" + str(nday) + "</td>"
else:
pre_str += "<td class=\"cld\"><a href=\"/events/" + str("%02i" % month) + "/" + str("%02i" % nday) + "/" + "\">" + str(nday) + "</a></td>"
pre_str += "</tr>"
pre_str += "</table>"
return pre_str