@@ -318,7 +318,11 @@ def preprocess_markdown(page, target=None, categories=[], page_filters=[],
318
318
md = f .read ()
319
319
320
320
else :
321
- pp_env = setup_pp_env (page , page_filters = page_filters , bypass_errors = bypass_errors )
321
+ if config ["preprocessor_allow_undefined" ] == False and not bypass_errors :
322
+ strict_undefined = True
323
+ else :
324
+ strict_undefined = False
325
+ pp_env = setup_pp_env (page , page_filters = page_filters , strict_undefined = strict_undefined )
322
326
md_raw = pp_env .get_template (page ["md" ])
323
327
md = md_raw .render (
324
328
currentpage = page ,
@@ -435,12 +439,12 @@ def get_page_where(page=None):
435
439
return False , config ["content_path" ]
436
440
437
441
438
- def setup_pp_env (page = None , page_filters = [], no_loader = False , bypass_errors = False ):
442
+ def setup_pp_env (page = None , page_filters = [], no_loader = False , strict_undefined = False ):
439
443
remote , path = get_page_where (page )
440
- if bypass_errors :
441
- preferred_undefined = jinja2 .Undefined
442
- else :
444
+ if strict_undefined :
443
445
preferred_undefined = jinja2 .StrictUndefined
446
+ else :
447
+ preferred_undefined = jinja2 .Undefined
444
448
if remote :
445
449
logger .debug ("Using remote template loader for page %s" % page )
446
450
pp_env = jinja2 .Environment (undefined = preferred_undefined ,
@@ -473,29 +477,35 @@ def undefined_or_ne(a,b):
473
477
return pp_env
474
478
475
479
476
- def setup_html_env (bypass_errors = False ):
477
- if bypass_errors :
478
- preferred_undefined = jinja2 .Undefined
479
- else :
480
+ def setup_html_env (strict_undefined = False ):
481
+ if strict_undefined :
480
482
preferred_undefined = jinja2 .StrictUndefined
483
+ else :
484
+ preferred_undefined = jinja2 .Undefined
481
485
if "template_path" in config :
482
486
env = jinja2 .Environment (undefined = preferred_undefined ,
483
487
loader = jinja2 .FileSystemLoader (config ["template_path" ]))
484
- # add custom "defined_and_" tests
485
- def defined_and_equalto (a ,b ):
486
- return env .tests ["defined" ](a ) and env .tests ["equalto" ](a , b )
487
- env .tests ["defined_and_equalto" ] = defined_and_equalto
488
- def undefined_or_ne (a ,b ):
489
- return env .tests ["undefined" ](a ) or env .tests ["ne" ](a , b )
490
- env .tests ["undefined_or_ne" ] = undefined_or_ne
491
488
else :
492
489
env = setup_fallback_env ()
490
+
491
+ # Customize env: add custom tests, lstrip & trim blocks
492
+ def defined_and_equalto (a ,b ):
493
+ return env .tests ["defined" ](a ) and env .tests ["equalto" ](a , b )
494
+ env .tests ["defined_and_equalto" ] = defined_and_equalto
495
+ def undefined_or_ne (a ,b ):
496
+ return env .tests ["undefined" ](a ) or env .tests ["ne" ](a , b )
497
+ env .tests ["undefined_or_ne" ] = undefined_or_ne
498
+
493
499
env .lstrip_blocks = True
494
500
env .trim_blocks = True
495
501
return env
496
502
497
503
498
504
def setup_fallback_env ():
505
+ """
506
+ Set up a Jinja env to load templates from the package. These templates
507
+ assume that we're not using StrictUndefined.
508
+ """
499
509
env = jinja2 .Environment (loader = jinja2 .PackageLoader (__name__ ))
500
510
env .lstrip_blocks = True
501
511
env .trim_blocks = True
@@ -669,7 +679,11 @@ def render_es_json(currentpage, es_template, pages=[], target=None, categories=[
669
679
"bypass_errors" : bypass_errors ,
670
680
}
671
681
672
- es_env = setup_pp_env (no_loader = True , bypass_errors = bypass_errors )
682
+ if config ["preprocessor_allow_undefined" ] == False and not bypass_errors :
683
+ strict_undefined = True
684
+ else :
685
+ strict_undefined = False
686
+ es_env = setup_pp_env (no_loader = True , strict_undefined = strict_undefined )
673
687
674
688
def render_es_field (value , context ):
675
689
if type (value ) == str : # jinja-render strings
@@ -741,8 +755,12 @@ def render_pages(target=None, mode="html", bypass_errors=False,
741
755
# Note: this doesn't delete the old index
742
756
743
757
if mode == "pdf" or mode == "html" :
758
+ if config ["template_allow_undefined" ] == False and not bypass_errors :
759
+ strict_undefined = True
760
+ else :
761
+ strict_undefined = False
744
762
# Insert generated HTML into templates using this Jinja environment
745
- env = setup_html_env (bypass_errors = bypass_errors )
763
+ env = setup_html_env (strict_undefined = strict_undefined )
746
764
fallback_env = setup_fallback_env ()
747
765
if mode == "pdf" :
748
766
out_path = temp_files_path or temp_dir ()
0 commit comments