Mercurial > piecrust2
annotate piecrust/templating/jinjaengine.py @ 1153:a9a592f655e3
config: Add setting for enabling baking or serving posts in the future.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Sat, 19 Jan 2019 17:41:30 -0800 |
parents | 8adc27285d93 |
children |
rev | line source |
---|---|
128
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
1 import os.path |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
2 import logging |
852
4850f8c21b6e
core: Start of the big refactor for PieCrust 3.0.
Ludovic Chabant <ludovic@chabant.com>
parents:
851
diff
changeset
|
3 from piecrust.sources.base import AbortedSourceUseError |
128
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
4 from piecrust.templating.base import (TemplateEngine, TemplateNotFoundError, |
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
5 TemplatingError) |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
6 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
7 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
8 logger = logging.getLogger(__name__) |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
9 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
10 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
11 class JinjaTemplateEngine(TemplateEngine): |
907
3e69f18912f5
jinja: Remove Twig compatibility, add timer, improve code.
Ludovic Chabant <ludovic@chabant.com>
parents:
864
diff
changeset
|
12 ENGINE_NAMES = ['jinja', 'jinja2', 'j2'] |
3e69f18912f5
jinja: Remove Twig compatibility, add timer, improve code.
Ludovic Chabant <ludovic@chabant.com>
parents:
864
diff
changeset
|
13 EXTENSIONS = ['html', 'jinja', 'jinja2', 'j2'] |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
14 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
15 def __init__(self): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
16 self.env = None |
851
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
17 self._jinja_syntax_error = None |
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
18 self._jinja_not_found = None |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
19 |
924
1bb704434ee2
formatting: Remove segment parts, you can use template tags instead.
Ludovic Chabant <ludovic@chabant.com>
parents:
907
diff
changeset
|
20 def renderSegment(self, path, segment, data): |
1bb704434ee2
formatting: Remove segment parts, you can use template tags instead.
Ludovic Chabant <ludovic@chabant.com>
parents:
907
diff
changeset
|
21 if not _string_needs_render(segment.content): |
989
8adc27285d93
bake: Big pass on bake performance.
Ludovic Chabant <ludovic@chabant.com>
parents:
924
diff
changeset
|
22 return segment.content, False |
445
d8d86debea81
performance: Only use Jinja2 for rendering text if necessary.
Ludovic Chabant <ludovic@chabant.com>
parents:
395
diff
changeset
|
23 |
907
3e69f18912f5
jinja: Remove Twig compatibility, add timer, improve code.
Ludovic Chabant <ludovic@chabant.com>
parents:
864
diff
changeset
|
24 self._ensureLoaded() |
3e69f18912f5
jinja: Remove Twig compatibility, add timer, improve code.
Ludovic Chabant <ludovic@chabant.com>
parents:
864
diff
changeset
|
25 |
924
1bb704434ee2
formatting: Remove segment parts, you can use template tags instead.
Ludovic Chabant <ludovic@chabant.com>
parents:
907
diff
changeset
|
26 seg_path = _make_segment_path(path, segment.offset) |
1bb704434ee2
formatting: Remove segment parts, you can use template tags instead.
Ludovic Chabant <ludovic@chabant.com>
parents:
907
diff
changeset
|
27 self.env.loader.segments_cache[seg_path] = ( |
1bb704434ee2
formatting: Remove segment parts, you can use template tags instead.
Ludovic Chabant <ludovic@chabant.com>
parents:
907
diff
changeset
|
28 path, segment.content) |
128
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
29 try: |
924
1bb704434ee2
formatting: Remove segment parts, you can use template tags instead.
Ludovic Chabant <ludovic@chabant.com>
parents:
907
diff
changeset
|
30 tpl = self.env.get_template(seg_path) |
851
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
31 except self._jinja_syntax_error as tse: |
454
96d363e2da4b
templating: Let Jinja2 cache the parsed template for page contents.
Ludovic Chabant <ludovic@chabant.com>
parents:
446
diff
changeset
|
32 raise self._getTemplatingError(tse, filename=path) |
851
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
33 except self._jinja_not_found: |
128
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
34 raise TemplateNotFoundError() |
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
35 |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
36 try: |
989
8adc27285d93
bake: Big pass on bake performance.
Ludovic Chabant <ludovic@chabant.com>
parents:
924
diff
changeset
|
37 return tpl.render(data), True |
851
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
38 except self._jinja_syntax_error as tse: |
128
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
39 raise self._getTemplatingError(tse) |
528
cf3218766fe2
bug: Of course I broke something. Some exceptions need to pass through Jinja.
Ludovic Chabant <ludovic@chabant.com>
parents:
524
diff
changeset
|
40 except AbortedSourceUseError: |
cf3218766fe2
bug: Of course I broke something. Some exceptions need to pass through Jinja.
Ludovic Chabant <ludovic@chabant.com>
parents:
524
diff
changeset
|
41 raise |
524
4bca25f99463
serve: Improve Jinja rendering error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
506
diff
changeset
|
42 except Exception as ex: |
715
a14371c5cda7
debug: Pass the exceptions untouched when debugging.
Ludovic Chabant <ludovic@chabant.com>
parents:
662
diff
changeset
|
43 if self.app.debug: |
a14371c5cda7
debug: Pass the exceptions untouched when debugging.
Ludovic Chabant <ludovic@chabant.com>
parents:
662
diff
changeset
|
44 raise |
524
4bca25f99463
serve: Improve Jinja rendering error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
506
diff
changeset
|
45 msg = "Error rendering Jinja markup" |
4bca25f99463
serve: Improve Jinja rendering error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
506
diff
changeset
|
46 rel_path = os.path.relpath(path, self.app.root_dir) |
4bca25f99463
serve: Improve Jinja rendering error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
506
diff
changeset
|
47 raise TemplatingError(msg, rel_path) from ex |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
48 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
49 def renderFile(self, paths, data): |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
50 self._ensureLoaded() |
128
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
51 |
907
3e69f18912f5
jinja: Remove Twig compatibility, add timer, improve code.
Ludovic Chabant <ludovic@chabant.com>
parents:
864
diff
changeset
|
52 try: |
3e69f18912f5
jinja: Remove Twig compatibility, add timer, improve code.
Ludovic Chabant <ludovic@chabant.com>
parents:
864
diff
changeset
|
53 tpl = self.env.select_template(paths) |
3e69f18912f5
jinja: Remove Twig compatibility, add timer, improve code.
Ludovic Chabant <ludovic@chabant.com>
parents:
864
diff
changeset
|
54 except self._jinja_syntax_error as tse: |
3e69f18912f5
jinja: Remove Twig compatibility, add timer, improve code.
Ludovic Chabant <ludovic@chabant.com>
parents:
864
diff
changeset
|
55 raise self._getTemplatingError(tse) |
3e69f18912f5
jinja: Remove Twig compatibility, add timer, improve code.
Ludovic Chabant <ludovic@chabant.com>
parents:
864
diff
changeset
|
56 except self._jinja_not_found: |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
57 raise TemplateNotFoundError() |
128
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
58 |
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
59 try: |
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
60 return tpl.render(data) |
851
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
61 except self._jinja_syntax_error as tse: |
128
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
62 raise self._getTemplatingError(tse) |
528
cf3218766fe2
bug: Of course I broke something. Some exceptions need to pass through Jinja.
Ludovic Chabant <ludovic@chabant.com>
parents:
524
diff
changeset
|
63 except AbortedSourceUseError: |
cf3218766fe2
bug: Of course I broke something. Some exceptions need to pass through Jinja.
Ludovic Chabant <ludovic@chabant.com>
parents:
524
diff
changeset
|
64 raise |
524
4bca25f99463
serve: Improve Jinja rendering error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
506
diff
changeset
|
65 except Exception as ex: |
864
5c5b85d4f17d
debug: Raise Jinja template exceptions the same way in both render passes.
Ludovic Chabant <ludovic@chabant.com>
parents:
855
diff
changeset
|
66 if self.app.debug: |
5c5b85d4f17d
debug: Raise Jinja template exceptions the same way in both render passes.
Ludovic Chabant <ludovic@chabant.com>
parents:
855
diff
changeset
|
67 raise |
524
4bca25f99463
serve: Improve Jinja rendering error reporting.
Ludovic Chabant <ludovic@chabant.com>
parents:
506
diff
changeset
|
68 msg = "Error rendering Jinja markup" |
907
3e69f18912f5
jinja: Remove Twig compatibility, add timer, improve code.
Ludovic Chabant <ludovic@chabant.com>
parents:
864
diff
changeset
|
69 name = getattr(tpl, 'name', '<unknown template>') |
3e69f18912f5
jinja: Remove Twig compatibility, add timer, improve code.
Ludovic Chabant <ludovic@chabant.com>
parents:
864
diff
changeset
|
70 raise TemplatingError(msg, name) from ex |
128
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
71 |
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
72 def _getTemplatingError(self, tse, filename=None): |
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
73 filename = tse.filename or filename |
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
74 if filename and os.path.isabs(filename): |
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
75 filename = os.path.relpath(filename, self.env.app.root_dir) |
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
76 err = TemplatingError(str(tse), filename, tse.lineno) |
28444014ce7d
Fix error reporting and counting of lines.
Ludovic Chabant <ludovic@chabant.com>
parents:
89
diff
changeset
|
77 raise err from tse |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
78 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
79 def _ensureLoaded(self): |
855
448710d84121
refactor: Get the taxonomy support back to a functional state.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
80 if self.env is not None: |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
81 return |
59
e3e3de44377c
Better handling of Jinja configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
48
diff
changeset
|
82 |
855
448710d84121
refactor: Get the taxonomy support back to a functional state.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
83 stats = self.app.env.stats |
907
3e69f18912f5
jinja: Remove Twig compatibility, add timer, improve code.
Ludovic Chabant <ludovic@chabant.com>
parents:
864
diff
changeset
|
84 stats.registerTimer('JinjaTemplateEngine_setup', |
855
448710d84121
refactor: Get the taxonomy support back to a functional state.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
85 raise_if_registered=False) |
907
3e69f18912f5
jinja: Remove Twig compatibility, add timer, improve code.
Ludovic Chabant <ludovic@chabant.com>
parents:
864
diff
changeset
|
86 stats.registerTimer('JinjaTemplateEngine_extensions', |
3e69f18912f5
jinja: Remove Twig compatibility, add timer, improve code.
Ludovic Chabant <ludovic@chabant.com>
parents:
864
diff
changeset
|
87 raise_if_registered=False) |
3e69f18912f5
jinja: Remove Twig compatibility, add timer, improve code.
Ludovic Chabant <ludovic@chabant.com>
parents:
864
diff
changeset
|
88 with stats.timerScope('JinjaTemplateEngine_setup'): |
855
448710d84121
refactor: Get the taxonomy support back to a functional state.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
89 self._load() |
448710d84121
refactor: Get the taxonomy support back to a functional state.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
90 |
448710d84121
refactor: Get the taxonomy support back to a functional state.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
91 def _load(self): |
448710d84121
refactor: Get the taxonomy support back to a functional state.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
92 get_config = self.app.config.get |
448710d84121
refactor: Get the taxonomy support back to a functional state.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
93 |
487
61508ae67488
templating: Make Jinja support arbitrary extension, show warning for old stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
485
diff
changeset
|
94 # Get the list of extensions to load. |
855
448710d84121
refactor: Get the taxonomy support back to a functional state.
Ludovic Chabant <ludovic@chabant.com>
parents:
852
diff
changeset
|
95 ext_names = get_config('jinja/extensions', []) |
487
61508ae67488
templating: Make Jinja support arbitrary extension, show warning for old stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
485
diff
changeset
|
96 if not isinstance(ext_names, list): |
61508ae67488
templating: Make Jinja support arbitrary extension, show warning for old stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
485
diff
changeset
|
97 ext_names = [ext_names] |
59
e3e3de44377c
Better handling of Jinja configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
48
diff
changeset
|
98 |
487
61508ae67488
templating: Make Jinja support arbitrary extension, show warning for old stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
485
diff
changeset
|
99 # Turn on autoescape by default. |
907
3e69f18912f5
jinja: Remove Twig compatibility, add timer, improve code.
Ludovic Chabant <ludovic@chabant.com>
parents:
864
diff
changeset
|
100 autoescape = get_config('jinja/auto_escape', True) |
487
61508ae67488
templating: Make Jinja support arbitrary extension, show warning for old stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
485
diff
changeset
|
101 if autoescape: |
61508ae67488
templating: Make Jinja support arbitrary extension, show warning for old stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
485
diff
changeset
|
102 ext_names.append('autoescape') |
61508ae67488
templating: Make Jinja support arbitrary extension, show warning for old stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
485
diff
changeset
|
103 |
61508ae67488
templating: Make Jinja support arbitrary extension, show warning for old stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
485
diff
changeset
|
104 # Create the final list of extensions. |
851
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
105 from piecrust.templating.jinja.extensions import ( |
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
106 PieCrustHighlightExtension, PieCrustCacheExtension, |
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
107 PieCrustSpacelessExtension, PieCrustFormatExtension) |
59
e3e3de44377c
Better handling of Jinja configuration.
Ludovic Chabant <ludovic@chabant.com>
parents:
48
diff
changeset
|
108 extensions = [ |
851
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
109 PieCrustHighlightExtension, |
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
110 PieCrustCacheExtension, |
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
111 PieCrustSpacelessExtension, |
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
112 PieCrustFormatExtension] |
487
61508ae67488
templating: Make Jinja support arbitrary extension, show warning for old stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
485
diff
changeset
|
113 for n in ext_names: |
61508ae67488
templating: Make Jinja support arbitrary extension, show warning for old stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
485
diff
changeset
|
114 if '.' not in n: |
61508ae67488
templating: Make Jinja support arbitrary extension, show warning for old stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
485
diff
changeset
|
115 n = 'jinja2.ext.' + n |
61508ae67488
templating: Make Jinja support arbitrary extension, show warning for old stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
485
diff
changeset
|
116 extensions.append(n) |
849
8f8bbb2e70e1
templating: Template engines can now load extensions directly from plugins.
Ludovic Chabant <ludovic@chabant.com>
parents:
802
diff
changeset
|
117 for je in self.app.plugin_loader.getTemplateEngineExtensions('jinja'): |
8f8bbb2e70e1
templating: Template engines can now load extensions directly from plugins.
Ludovic Chabant <ludovic@chabant.com>
parents:
802
diff
changeset
|
118 extensions.append(je) |
487
61508ae67488
templating: Make Jinja support arbitrary extension, show warning for old stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
485
diff
changeset
|
119 |
61508ae67488
templating: Make Jinja support arbitrary extension, show warning for old stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
485
diff
changeset
|
120 # Create the Jinja environment. |
61508ae67488
templating: Make Jinja support arbitrary extension, show warning for old stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
485
diff
changeset
|
121 logger.debug("Creating Jinja environment with folders: %s" % |
61508ae67488
templating: Make Jinja support arbitrary extension, show warning for old stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
485
diff
changeset
|
122 self.app.templates_dirs) |
851
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
123 from piecrust.templating.jinja.loader import PieCrustLoader |
487
61508ae67488
templating: Make Jinja support arbitrary extension, show warning for old stuff.
Ludovic Chabant <ludovic@chabant.com>
parents:
485
diff
changeset
|
124 loader = PieCrustLoader(self.app.templates_dirs) |
851
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
125 from piecrust.templating.jinja.environment import PieCrustEnvironment |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
126 self.env = PieCrustEnvironment( |
851
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
127 self.app, |
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
128 loader=loader, |
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
129 extensions=extensions) |
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
130 |
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
131 # Get types we need later. |
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
132 from jinja2 import TemplateNotFound |
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
133 from jinja2.exceptions import TemplateSyntaxError |
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
134 self._jinja_syntax_error = TemplateSyntaxError |
2c7e57d80bba
optimize: Don't load Jinja unless we need to.
Ludovic Chabant <ludovic@chabant.com>
parents:
849
diff
changeset
|
135 self._jinja_not_found = TemplateNotFound |
3
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
136 |
f485ba500df3
Gigantic change to basically make PieCrust 2 vaguely functional.
Ludovic Chabant <ludovic@chabant.com>
parents:
diff
changeset
|
137 |
454
96d363e2da4b
templating: Let Jinja2 cache the parsed template for page contents.
Ludovic Chabant <ludovic@chabant.com>
parents:
446
diff
changeset
|
138 def _string_needs_render(txt): |
96d363e2da4b
templating: Let Jinja2 cache the parsed template for page contents.
Ludovic Chabant <ludovic@chabant.com>
parents:
446
diff
changeset
|
139 index = txt.find('{') |
96d363e2da4b
templating: Let Jinja2 cache the parsed template for page contents.
Ludovic Chabant <ludovic@chabant.com>
parents:
446
diff
changeset
|
140 while index >= 0: |
96d363e2da4b
templating: Let Jinja2 cache the parsed template for page contents.
Ludovic Chabant <ludovic@chabant.com>
parents:
446
diff
changeset
|
141 ch = txt[index + 1] |
96d363e2da4b
templating: Let Jinja2 cache the parsed template for page contents.
Ludovic Chabant <ludovic@chabant.com>
parents:
446
diff
changeset
|
142 if ch == '{' or ch == '%': |
96d363e2da4b
templating: Let Jinja2 cache the parsed template for page contents.
Ludovic Chabant <ludovic@chabant.com>
parents:
446
diff
changeset
|
143 return True |
96d363e2da4b
templating: Let Jinja2 cache the parsed template for page contents.
Ludovic Chabant <ludovic@chabant.com>
parents:
446
diff
changeset
|
144 index = txt.find('{', index + 1) |
96d363e2da4b
templating: Let Jinja2 cache the parsed template for page contents.
Ludovic Chabant <ludovic@chabant.com>
parents:
446
diff
changeset
|
145 return False |
96d363e2da4b
templating: Let Jinja2 cache the parsed template for page contents.
Ludovic Chabant <ludovic@chabant.com>
parents:
446
diff
changeset
|
146 |
96d363e2da4b
templating: Let Jinja2 cache the parsed template for page contents.
Ludovic Chabant <ludovic@chabant.com>
parents:
446
diff
changeset
|
147 |
924
1bb704434ee2
formatting: Remove segment parts, you can use template tags instead.
Ludovic Chabant <ludovic@chabant.com>
parents:
907
diff
changeset
|
148 def _make_segment_path(path, start): |
1bb704434ee2
formatting: Remove segment parts, you can use template tags instead.
Ludovic Chabant <ludovic@chabant.com>
parents:
907
diff
changeset
|
149 return '$seg=%s:%d' % (path, start) |
454
96d363e2da4b
templating: Let Jinja2 cache the parsed template for page contents.
Ludovic Chabant <ludovic@chabant.com>
parents:
446
diff
changeset
|
150 |