calendar überschreiben

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ExxE
User
Beiträge: 5
Registriert: Donnerstag 25. Dezember 2014, 11:42

Das Modul calendar beinhaltet eine Klasse mit welcher man eine HTML-Tabelle erstellen kann, diese ist auch gut.

Ich würde gerne alle Kästchen mit einer Farbe füllen, was in der mit der Manipulation der Funktion formatday(self, day, weekday) gut funktioniert

Code: Alles auswählen

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 bgcolor="#00FFFF" class="%s">%d</td>' % (self.cssclasses[weekday], day)  #<---------- bgcolor="#00FFFF" eingefügt
Nun will ich ja nicht die gesamte Basisklasse verändern, sondern diese nur überschreiben wie ich es folgend gemacht habe.

Code: Alles auswählen

from calendar import HTMLCalendar


class Kalender(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 bgcolor="#00FFFF" class="%s">%d</td>' % (self.cssclasses[weekday], day)
jetzt schaffe ich es nicht auszugeben so das die neue formatday Funktion benutzt wird und nicht die von calendar

um den eingebauten calender zu benutzen tipp ich den folgenden Code

Code: Alles auswählen

def hello2():
    myCal = calendar.HTMLCalendar(calendar.SUNDAY)
    myStr = myCal.formatmonth(2009, 7)

    print myStr
    
    return render_template('hello.html', calender = myStr)  #<----- außer acht lassen
Doch meine Klasse schaffe ich einfach nicht zu integrieren:

Code: Alles auswählen

def hello2():

        myCal = Kalender.HTMLCalendar(calendar.SUNDAY) #<--- Hier liegt das Problem habe schon unzählige Möglichkeiten ausprobiert
        kalender = myCal.formatmonth(2009, 7)                 #<--- es will einfach nicht meine Klasse benutzen

        print kalender
        return render_template('hello.html', calender = kalender) #<----- außer acht lassen
Es benutzt immer noch die calendar Klasse, ich weiß es ist ein sehr dummer Fehler, aber ich sitze schon seit 3 Tagen dran.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@ExxE: hast Du schon

Code: Alles auswählen

myCal = Kalender(calendar.SUNDAY)
ausprobiert?
ExxE
User
Beiträge: 5
Registriert: Donnerstag 25. Dezember 2014, 11:42

Traceback (most recent call last)
File "C:\Python27\lib\site-packages\flask\app.py", line 1836, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Python27\lib\site-packages\flask\app.py", line 1820, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "C:\Python27\lib\site-packages\flask\app.py", line 1403, in handle_exception
reraise(exc_type, exc_value, tb)
File "C:\Python27\lib\site-packages\flask\app.py", line 1817, in wsgi_app
response = self.full_dispatch_request()
File "C:\Python27\lib\site-packages\flask\app.py", line 1477, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Python27\lib\site-packages\flask\app.py", line 1381, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "C:\Python27\lib\site-packages\flask\app.py", line 1475, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Python27\lib\site-packages\flask\app.py", line 1461, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "C:\Users\ExxE\PycharmProjects\prototyp_05\routes.py", line 371, in hello2
myCal = Kalender(calendar.SUNDAY)
TypeError: 'module' object is not callable

Leider funzt es nicht :(
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@ExxE: wie Du Deinen Namensraum gestaltet hast, weißt Du selbst am besten, wie Du also zu Deiner neuen Kalender-Klasse kommst. Modulnamen werden üblicherweise klein geschrieben, um sie von Klassen unterscheiden zu können.
bb1898
User
Beiträge: 219
Registriert: Mittwoch 12. Juli 2006, 14:28

Wenn es tatsächlich, wie im Ausgangsbeitrag beschrieben, nur um Änderungen bei der Formatierung geht, würde ich doch einfach ein eigenes Stylesheet anlegen und dort meine Wünsche eintragen. Dazu sind ja wohl die "class=..."-Angaben in den calendar-Formatierungsmethoden gedacht. calendar.formatyearpage() nimmt auf jeden Fall den Namen eines Stylesheets entgegen, andere Methoden tun es vielleicht auch, ich habe jetzt gerade nicht nachgesehen.
ExxE
User
Beiträge: 5
Registriert: Donnerstag 25. Dezember 2014, 11:42

Danke, jetzt funzt es. Ist ein echt peinlicher Fehler :roll:
Antworten