2
2
"""
3
3
Jinja support.
4
4
"""
5
- import typing as t
6
-
7
5
from django .template import RequestContext , loader
8
6
from jinja2 import pass_context
9
7
from jinja2 .ext import Extension
10
- from jinja2 .runtime import Context , Undefined
11
-
12
- from .reactpy import component as djt_component
13
- from .. import config
8
+ from jinja2 .runtime import Context
9
+ from reactpy_django import config
10
+ from reactpy_django .templatetags .reactpy import component
14
11
15
12
16
13
class ReactPyExtension (Extension ):
@@ -31,11 +28,11 @@ def __init__(self, environment):
31
28
#
32
29
# All we need is to add global "component" to the environment.
33
30
#
34
- environment .globals ["component" ] = self ._jinja_component
31
+ environment .globals ["component" ] = self .template_tag
35
32
36
33
@pass_context
37
- def _jinja_component (self , __context : Context , dotted_path : str , * args : t . Any , host : str | None = None ,
38
- prerender : str = str (config .REACTPY_PRERENDER ), ** kwargs : t . Any ) -> t . Union [ t . Any , Undefined ] :
34
+ def template_tag (self , jinja_context : Context , dotted_path : str , * args , host : str | None = None ,
35
+ prerender : str = str (config .REACTPY_PRERENDER ), ** kwargs ) -> str :
39
36
"""
40
37
This method is used to embed an existing ReactPy component into your
41
38
Jinja2 template.
@@ -58,10 +55,9 @@ def _jinja_component(self, __context: Context, dotted_path: str, *args: t.Any, h
58
55
Returns:
59
56
Whatever the components returns.
60
57
"""
61
- djt_context = RequestContext (__context .parent ['request' ], autoescape = __context .eval_ctx .autoescape )
62
- context = djt_component ( djt_context , dotted_path , * args , host = host , prerender = prerender , ** kwargs )
58
+ django_context = RequestContext (jinja_context .parent ['request' ], autoescape = jinja_context .eval_ctx .autoescape )
59
+ template_context = component ( django_context , dotted_path , * args , host = host , prerender = prerender , ** kwargs )
63
60
#
64
61
# TODO: can this be usefully cached?
65
62
#
66
- result = loader .render_to_string (self .DJT_TEMPLATE , context , __context .parent ['request' ])
67
- return result
63
+ return loader .render_to_string (self .DJT_TEMPLATE , template_context , jinja_context .parent ['request' ])
0 commit comments