Mercurial > piecrust2
comparison piecrust/templating/pystacheengine.py @ 429:ca5a3c970263
templating: Workaround for a bug with Pystache.
| author | Ludovic Chabant <ludovic@chabant.com> |
|---|---|
| date | Sat, 27 Jun 2015 00:03:56 -0700 |
| parents | f4b7c8f183a4 |
| children | 32c7c2d219d2 |
comparison
equal
deleted
inserted
replaced
| 428:f4b7c8f183a4 | 429:ca5a3c970263 |
|---|---|
| 51 | 51 |
| 52 def _ensureLoaded(self): | 52 def _ensureLoaded(self): |
| 53 if self.renderer: | 53 if self.renderer: |
| 54 return | 54 return |
| 55 | 55 |
| 56 self.renderer = pystache.Renderer( | 56 self.renderer = _WorkaroundRenderer( |
| 57 search_dirs=self.app.templates_dirs) | 57 search_dirs=self.app.templates_dirs) |
| 58 | 58 |
| 59 | |
| 60 _knowns = ['PieCrustData', 'LazyPageConfigData', 'Paginator', 'Assetor', | |
| 61 'PageLinkerData'] | |
| 62 | |
| 63 | |
| 64 class _WorkaroundRenderer(pystache.Renderer): | |
| 65 def _make_resolve_context(self): | |
| 66 mrc = super(_WorkaroundRenderer, self)._make_resolve_context() | |
| 67 | |
| 68 def _workaround(stack, name): | |
| 69 # Pystache will treat anything that's not a string or a dict as | |
| 70 # a list. This is just plain wrong, but it will take a while before | |
| 71 # the project can get patches on Pypi. | |
| 72 res = mrc(stack, name) | |
| 73 if res is not None and res.__class__.__name__ in _knowns: | |
| 74 res = [res] | |
| 75 return res | |
| 76 | |
| 77 return _workaround | |
| 78 |
