forked from redhog/fcdjangoutils
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathwidgettagmiddleware.py
67 lines (54 loc) · 2.5 KB
/
widgettagmiddleware.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# -*- coding: utf-8 -*-
import threading
import re
class WidgetTagMiddleware(object):
data = threading.local()
var_re = re.compile(r'%WidgetTagMiddleware.([^%]*)%')
def process_request(self, request):
return None
def process_view(self, request, view_func, view_args, view_kwargs):
return None
def process_response(self, request, response):
if 'text/' in response['Content-Type']:
try:
for name, values in getattr(self.data, 'vars', {}).iteritems():
response.content = response.content.replace('%WidgetTagMiddleware.'+name+'%', ''.join(values.itervalues()).encode('utf-8'))
response.content = self.var_re.sub('', response.content)
except Exception, e:
print e
print response['Content-Type']
print type(response.content)
for name, values in getattr(self.data, 'vars', {}).iteritems():
print type(name), [type(v) for v in values.itervalues()]
raise
return response
def process_exception(self, request, exception):
return None
@classmethod
def _ensure(cls):
if getattr(cls.data, 'vars', None) is None:
cls.data.vars = {}
@classmethod
def add(cls, section, key, value):
cls._ensure()
if section not in cls.data.vars:
cls.data.vars[section] = {}
cls.data.vars[section][key] = value
@classmethod
def addjsfile(cls, filename):
cls.add("head.javascript", filename, "<script id='%s' language='javascript' type='text/javascript' src='%s'></script>" % (filename, filename,))
@classmethod
def addieonlyjsfile(cls, filename):
cls.add("head.javascript", filename, "<!--[if IE]><script id='%s' language='javascript' type='text/javascript' src='%s'></script><![endif]-->" % (filename, filename,))
@classmethod
def addcssfile(cls, filename):
cls.add("head.css", filename, "<link id='%s' rel='stylesheet' type='text/css' href='%s' />" % (filename, filename,))
@classmethod
def addjs(cls, name, js):
cls.add("head.javascript", name, "<script id='%s' language='javascript' type='text/javascript'>%s</script>" % (name, js))
@classmethod
def addcss(cls, name, css):
cls.add("head.css", name, "<style id='%s' type='text/css'>%s</style>" % (name, css))
@classmethod
def adddialog(cls, name, html):
cls.add("body.dialog", name, "<div id='%s'>%s</div>" % (name, html))