Mercurial > piecrust2
comparison piecrust/rendering.py @ 183:fff195335d0a
render: When a template engine can't be found, show the correct name in the error.
Raise the exception related to a template engine not being found when we still
have the actual name we were looking for.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sun, 04 Jan 2015 14:57:37 -0800 |
parents | e9a3d405e18f |
children | 27d623a241c6 |
comparison
equal
deleted
inserted
replaced
182:a54d3c0b5f4a | 183:fff195335d0a |
---|---|
14 content_abstract_re = re.compile(r'^<!--\s*(more|(page)?break)\s*-->\s*$', | 14 content_abstract_re = re.compile(r'^<!--\s*(more|(page)?break)\s*-->\s*$', |
15 re.MULTILINE) | 15 re.MULTILINE) |
16 | 16 |
17 | 17 |
18 class PageRenderingError(Exception): | 18 class PageRenderingError(Exception): |
19 pass | |
20 | |
21 | |
22 class TemplateEngineNotFound(Exception): | |
19 pass | 23 pass |
20 | 24 |
21 | 25 |
22 class RenderedPage(object): | 26 class RenderedPage(object): |
23 def __init__(self, page, uri, num=1): | 27 def __init__(self, page, uri, num=1): |
157 app = page.app | 161 app = page.app |
158 engine_name = page.config.get('template_engine') | 162 engine_name = page.config.get('template_engine') |
159 format_name = page.config.get('format') | 163 format_name = page.config.get('format') |
160 | 164 |
161 engine = get_template_engine(app, engine_name) | 165 engine = get_template_engine(app, engine_name) |
162 if engine is None: | |
163 raise PageRenderingError("Can't find template engine '%s'." % engine_name) | |
164 | 166 |
165 formatted_content = {} | 167 formatted_content = {} |
166 for seg_name, seg in page.raw_content.items(): | 168 for seg_name, seg in page.raw_content.items(): |
167 seg_text = '' | 169 seg_text = '' |
168 for seg_part in seg.parts: | 170 for seg_part in seg.parts: |
190 | 192 |
191 | 193 |
192 def render_layout(layout_name, page, layout_data): | 194 def render_layout(layout_name, page, layout_data): |
193 names = layout_name.split(',') | 195 names = layout_name.split(',') |
194 default_template_engine = get_template_engine(page.app, None) | 196 default_template_engine = get_template_engine(page.app, None) |
195 default_exts = ['.' + e.lstrip('.') for e in default_template_engine.EXTENSIONS] | 197 default_exts = ['.' + e.lstrip('.') |
198 for e in default_template_engine.EXTENSIONS] | |
196 full_names = [] | 199 full_names = [] |
197 for name in names: | 200 for name in names: |
198 if '.' not in name: | 201 if '.' not in name: |
199 full_names.append(name + '.html') | 202 full_names.append(name + '.html') |
200 for ext in default_exts: | 203 for ext in default_exts: |
203 full_names.append(name) | 206 full_names.append(name) |
204 | 207 |
205 _, engine_name = os.path.splitext(full_names[0]) | 208 _, engine_name = os.path.splitext(full_names[0]) |
206 engine_name = engine_name.lstrip('.') | 209 engine_name = engine_name.lstrip('.') |
207 engine = get_template_engine(page.app, engine_name) | 210 engine = get_template_engine(page.app, engine_name) |
208 if engine is None: | 211 |
209 raise PageRenderingError("No such template engine: %s" % engine_name) | |
210 try: | 212 try: |
211 output = engine.renderFile(full_names, layout_data) | 213 output = engine.renderFile(full_names, layout_data) |
212 except TemplateNotFoundError as ex: | 214 except TemplateNotFoundError as ex: |
213 msg = "Can't find template for page: %s\n" % page.path | 215 msg = "Can't find template for page: %s\n" % page.path |
214 msg += "Looked for: %s" % ', '.join(full_names) | 216 msg += "Looked for: %s" % ', '.join(full_names) |
221 engine_name = None | 223 engine_name = None |
222 engine_name = engine_name or app.config.get('site/default_template_engine') | 224 engine_name = engine_name or app.config.get('site/default_template_engine') |
223 for engine in app.plugin_loader.getTemplateEngines(): | 225 for engine in app.plugin_loader.getTemplateEngines(): |
224 if engine_name in engine.ENGINE_NAMES: | 226 if engine_name in engine.ENGINE_NAMES: |
225 return engine | 227 return engine |
226 return None | 228 raise TemplateEngineNotFound("No such template engine: %s" % engine_name) |
229 | |
227 | 230 |
228 def format_text(app, format_name, txt, exact_format=False): | 231 def format_text(app, format_name, txt, exact_format=False): |
229 if exact_format and not format_name: | 232 if exact_format and not format_name: |
230 raise Exception("You need to specify a format name.") | 233 raise Exception("You need to specify a format name.") |
231 | 234 |