Mercurial > piecrust2
annotate piecrust/templating/jinjaengine.py @ 1105:68593928298d
internal: Remove unnecessary imports.
| author | Ludovic Chabant <ludovic@chabant.com> |
|---|---|
| date | Sun, 18 Feb 2018 20:29:42 -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 |
