diff --git a/pystache/template.py b/pystache/template.py index 2ffd33f..a48723b 100644 --- a/pystache/template.py +++ b/pystache/template.py @@ -68,7 +68,8 @@ class Template(object): tag = r"%(otag)s(#|=|&|!|>|\{)?(.+?)\1?%(ctag)s+" self.tag_re = re.compile(tag % tags) - def _render_sections(self, template, view): + def _render(self, template, view): + output = '' while True: match = self.section_re.search(template) if match is None: @@ -98,9 +99,15 @@ class Template(object): elif (not it and section[2] == '^') or (it and section[2] != '^'): replacer = self._render_dictionary(inner, it) - template = literal(template.replace(section, replacer)) + # Render template prior to section too + output = output + self._render_tags(template[0:match.start()]) + replacer + + template = template[match.end():] - return template + # Render remainder + output = output + self._render_tags(template) + + return output def _render_tags(self, template): output = '' @@ -172,8 +179,8 @@ class Template(object): return literal(self.view.get(tag_name, '')) def render(self, encoding=None): - template = self._render_sections(self.template, self.view) - result = self._render_tags(template) + result = self._render(self.template, self.view) + #result = self._render_tags(template) if encoding is not None: result = result.encode(encoding)