Skip to content

Commit 68a7ac5

Browse files
author
jczic
committed
Add special print function in PyhtmlTemplate module to rendering unescaped HTML
1 parent df978f6 commit 68a7ac5

File tree

2 files changed

+20
-7
lines changed

2 files changed

+20
-7
lines changed

MicroWebSrv2/mods/PyhtmlTemplate.py

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ def _parseCode(self, pyGlobalVars, pyLocalVars, execute) :
167167
self._pyGlobalVars = (pyGlobalVars if isinstance(pyGlobalVars, dict) else { })
168168
self._pyLocalVars = (pyLocalVars if isinstance(pyLocalVars, dict) else { })
169169
self._rendered = ''
170+
self._pyGlobalVars['print'] = self._renderingPrint
170171
newTokenToProcess = self._parseBloc(execute)
171172
if newTokenToProcess is not None :
172173
raise CodeTemplateException( '"%s" instruction is not valid here (line %s)'
@@ -200,6 +201,11 @@ def _parseBloc(self, execute) :
200201

201202
# ------------------------------------------------------------------------
202203

204+
def _renderingPrint(self, s) :
205+
self._rendered += str(s)
206+
207+
# ------------------------------------------------------------------------
208+
203209
def _processToken(self, tokenContent, execute) :
204210
parts = tokenContent.split(' ', 1)
205211
instructName = parts[0].strip()
@@ -212,13 +218,14 @@ def _processToken(self, tokenContent, execute) :
212218
newTokenToProcess = self._instructions[instructName](instructBody, execute)
213219
elif execute :
214220
try :
215-
s = str( eval( tokenContent,
216-
self._pyGlobalVars,
217-
self._pyLocalVars ) )
218-
if (self._escapeStrFunc is not None) :
219-
self._rendered += self._escapeStrFunc(s)
220-
else :
221-
self._rendered += s
221+
ret = eval( tokenContent,
222+
self._pyGlobalVars,
223+
self._pyLocalVars )
224+
if ret is not None :
225+
if (self._escapeStrFunc is not None) :
226+
self._rendered += self._escapeStrFunc(str(ret))
227+
else :
228+
self._rendered += str(ret)
222229
except Exception as ex :
223230
raise CodeTemplateException('%s (line %s)' % (ex, self._line))
224231
return newTokenToProcess

www/test.pyhtml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@
4141

4242
<div class="sep"></div>
4343

44+
{{ py }}
45+
print('Unescaped HTML: <strong><u>Okay</u></strong>')
46+
{{ end }}
47+
48+
<div class="sep"></div>
49+
4450
Your address:<br />
4551
<ul>
4652
<li> IP = {{ Request.UserAddress[0] }} </li>

0 commit comments

Comments
 (0)