- Timestamp:
- 06/29/07 16:05:08 (17 months ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
branches/0.8(django)/PyLucid/plugins_internal/page_style/page_style.py
r1087 r1127 8 8 - Put the css html tag into the cms page. 9 9 - Send the current stylesheet directly to the client. 10 11 Note: 12 The page_style.lucidTag() method adds the additional_content ADD_DATA_TAG 13 into the page. 14 The middleware PyLucid.middlewares.additional_content replace the tag and 15 puts the collected CSS/JS contents into the page. 10 16 11 17 Last commit info: … … 27 33 from django.http import HttpResponse 28 34 35 from PyLucid.middlewares.additional_content import ADD_DATA_TAG 29 36 from PyLucid.models import Style 30 31 37 from PyLucid.system.BaseModule import PyLucidBaseModule 32 38 33 39 class page_style(PyLucidBaseModule): 34 40 35 #~ def __init__(self, *args, **kwargs):36 #~ super(page_style, self).__init__(*args, **kwargs)37 38 41 def lucidTag(self): 39 # Schreibt den addCode-Tag, damit am Ende noch die CSS/JS Daten 40 # von Modulen eingefügt werden können 41 #~ self.response.write(self.response.addCode.tag) 42 """ 43 -Put a link to sendStyle into the page. 44 -Insert the ADD_DATA_TAG for the additional_content middleware 45 """ 46 self.response.write(ADD_DATA_TAG) 42 47 43 48 current_page = self.context["PAGE"] … … 49 54 ) 50 55 cssTag = '<link rel="stylesheet" type="text/css" href="%s" />\n' % url 56 self.response.write(cssTag) 51 57 52 self.response.write(cssTag)53 58 54 59 def print_current_style(self): 55 60 """ 56 CSS direkt in die Seite einfügen 61 -Write the stylesheet directly into the page. 62 -Insert the ADD_DATA_TAG for the additional_content middleware 63 Used with the tag: {% lucidTag page_style.print_current_style %} 57 64 """ 58 # Schreibt den addCode-Tag, damit am Ende noch die CSS/JS Daten 59 # von Modulen eingefügt werden können 60 self.response.write(self.response.addCode.tag) 65 self.response.write(ADD_DATA_TAG) 61 66 62 page_id = self.session["page_id"] 63 getItems = ["content"] 64 css = self.db.side_style_by_id(page_id, getItems) 65 css = css["content"] 67 current_page = self.context["PAGE"] 68 stylesheet = current_page.style 66 69 67 self.response.write('<style type="text/css">') 68 self.response.write(css) 69 self.response.write('</style>') 70 context = { 71 "content": stylesheet.content, 72 } 73 self._render_template("write_styles", context)#, debug=True) 74 70 75 71 76 def sendStyle(self, css_filename): 72 77 """ 73 Sendet das CSS als Datei, da in die Seite nur ein Link eingefügt, der74 jetzt "ausgeführt" wird.75 Dabei wird eine "Browsercache-Anfrage" berücksichtigt.78 send the stylesheet as a file to the client. 79 It's the request started with the link tag from self.lucidTag() ;) 80 TODO: Should insert some Headers for the browser cache. 76 81 """ 77 82 css_name = css_filename.split(".",1)[0] … … 90 95 return response 91 96 92 """93 timeFormat = "%a, %d %b %Y %H:%M:%S GMT"94 95 # Ein "wirklich" frisches response-Object nehmen:96 response = HttpResponse()97 response.headers['Content-Type'] = 'text/css; charset=utf-8'98 99 # Hop-by-hop Headers ist mit wsgiref nicht erlaubt:100 #~ response.headers['Connection'] = "Keep-Alive"101 102 page_id = self.session["page_id"]103 getItems = ["id", "content", "lastupdatetime"]104 cssData = self.db.side_style_by_id(page_id, getItems)105 106 lastupdatetime = cssData["lastupdatetime"] # datetime-Object!107 108 #~ raise str(repr(lastupdatetime))109 110 lastModified = lastupdatetime.strftime(timeFormat)111 #~ print "lastModified:", lastModified112 113 # 1Tag * 60Min * 60Sec = 3600Sec114 response.headers['Cache-Control'] = 'max-age=3600'115 delta = datetime.timedelta(days=1)116 expires = lastupdatetime + delta117 expires = expires.strftime(timeFormat)118 #~ print "expires:", expires119 response.headers['Expires'] = expires120 121 # ID damit der Browser das Style eindeutige Identifizieren kann:122 eTag = '"style-%s"' % cssData["id"]123 response.headers['Etag'] = eTag124 125 # Chaching im Browser überprüfen:126 if "HTTP_IF_MODIFIED_SINCE" in self.environ and \127 "HTTP_IF_NONE_MATCH" in self.environ:128 # Der Browser fragt nach, ob es die Daten aus seinem Chache nehmen129 # soll.130 send_modified = self.environ["HTTP_IF_MODIFIED_SINCE"]131 send_eTag = self.environ["HTTP_IF_NONE_MATCH"]132 if send_eTag == eTag and send_modified == lastModified:133 # CSS Daten haben sich nicht geändert!134 response.status = 304 # HTTP/1.x 304 Not Modified135 return response136 137 # Die CSS Daten werden zum ersten mal gesendet oder diese haben138 # sich seit dem letzten Aufruf geändert.139 140 cssContent = cssData["content"]141 142 # Content-Length kann nur in UTF8 und nicht richtig in Unicode143 # ermittelt werden!!!144 cssContent = cssContent.encode("utf8")145 contentLen = len(cssContent)146 response.headers['Content-Length'] = '%s' % contentLen147 148 response.headers['Last-Modified'] = lastModified149 response.headers['Content-Transfer-Encoding'] = '8bit' #'binary'150 response.headers['Content-Type'] = \151 'text/css; charset=utf-8'152 153 response.write(cssContent)154 155 # force Windows input/output to binary156 if sys.platform == "win32":157 try:158 import msvcrt159 msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)160 msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)161 except:162 pass163 164 return response165 166 """167 168 169 170 171
