Я создаю приложение-календарь с использованием django. Календарь должен быть вертикальным - PullRequest
0 голосов
/ 22 октября 2019

Пока я понял это Джанго-календарь . Но мне нужно вертикальный календарь (извините, я не нашел ничего по-английски) Слева у нас есть заголовки дней недели и названия месяцев вверху.

Я начал переопределять python-calendar HTMLCalendar методы. Я подумал написать новый метод formatweekdayrow, который будет генерировать строки по понедельникам, вторникам .... воскресеньям. Но я застрял, потому что не до конца понимаю, как работают все эти методы.

Так что вопрос в том, должен ли я подумать над своей идеей написания formatweekdayrow, или же невозможно создать такой вертикальный календарь? Или, может быть, есть какой-то простой и умный способ сделать это?

1 Ответ

0 голосов
/ 23 октября 2019

Я переписал несколько методов и получил то, что мне нужно

class Vertical(HTMLCalendar):

    def formatweekrow(self, theweeks, daynum):
        """
        Return a complete week as a table row.
        """
        v = []
        s = v.append
        s('<tr>')
        for theweek in theweeks:
            for (d, wd) in theweek:
                if wd == daynum:
                    s(self.formatday(d, wd))
        s('</tr>')
        return ''.join(v)

    def formatmonth(self, theyear, themonth, withyear=True):
        """
        Return a formatted month as a table.
        """
        cnt = 0
        v = []
        theweeks = self.monthdays2calendar(theyear, themonth)
        a = v.append
        a('<table border="0" cellpadding="0" cellspacing="0"     class="">')
        a('\n')
        a(self.formatmonthname(theyear, themonth, withyear=withyear))
        a('\n')
        a(self.formatweekheader())
        a('\n')
        while cnt < 7:
            a(self.formatweekrow(theweeks, cnt))
            a('\n')
            cnt += 1
        a('</table>')
        a('\n')
        return ''.join(v)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...