5
5
from logging import Logger
6
6
from typing import TYPE_CHECKING , Any , cast
7
7
8
+ from jinja2 import Template
8
9
from jinja2 .exceptions import TemplateNotFound
9
10
10
11
from jupyter_server .base .handlers import FileFindHandler
@@ -21,13 +22,14 @@ class ExtensionHandlerJinjaMixin:
21
22
template rendering.
22
23
"""
23
24
24
- def get_template (self , name : str ) -> str :
25
+ def get_template (self , name : str ) -> Template :
25
26
"""Return the jinja template object for a given name"""
26
27
try :
27
28
env = f"{ self .name } _jinja2_env" # type:ignore[attr-defined]
28
- return cast (str , self .settings [env ].get_template (name )) # type:ignore[attr-defined]
29
+ template = cast (Template , self .settings [env ].get_template (name )) # type:ignore[attr-defined]
30
+ return template
29
31
except TemplateNotFound :
30
- return cast (str , super ().get_template (name )) # type:ignore[misc]
32
+ return cast (Template , super ().get_template (name )) # type:ignore[misc]
31
33
32
34
33
35
class ExtensionHandlerMixin :
@@ -81,6 +83,20 @@ def server_config(self) -> Config:
81
83
def base_url (self ) -> str :
82
84
return cast (str , self .settings .get ("base_url" , "/" ))
83
85
86
+ def render_template (self , name : str , ** ns ) -> str :
87
+ """Override render template to handle static_paths
88
+
89
+ If render_template is called with a template from the base environment
90
+ (e.g. default error pages)
91
+ make sure our extension-specific static_url is _not_ used.
92
+ """
93
+ template = cast (Template , self .get_template (name )) # type:ignore[attr-defined]
94
+ ns .update (self .template_namespace ) # type:ignore[attr-defined]
95
+ if template .environment is self .settings ["jinja2_env" ]:
96
+ # default template environment, use default static_url
97
+ ns ["static_url" ] = super ().static_url # type:ignore[misc]
98
+ return cast (str , template .render (** ns ))
99
+
84
100
@property
85
101
def static_url_prefix (self ) -> str :
86
102
return self .extensionapp .static_url_prefix
0 commit comments