5
5
"""
6
6
import typing
7
7
8
+ from collections import defaultdict
9
+
8
10
9
11
class Page :
10
12
"""It's python Descriptor."""
@@ -20,14 +22,19 @@ def __init__(self, page: 'pages.models.Page'=None, context: typing.Dict[str, typ
20
22
because client code wants the same context for many different cases.
21
23
"""
22
24
self ._page = page
23
- self ._context = context or {}
25
+ self ._global_context = defaultdict (dict )
26
+ if context :
27
+ self ._global_context [page .id ] = context
24
28
25
29
def __get__ (self , instance : 'pages.models.Page' , type_ ):
26
- return Page (instance , {'page' : instance , ** self ._context })
30
+ return Page (
31
+ instance ,
32
+ {'page' : instance , ** self ._global_context [instance .id ]}
33
+ )
27
34
28
35
def __set__ (self , instance : 'pages.models.Page' , value : typing .Dict [str , typing .Any ]):
29
36
self ._page = instance
30
- self ._context = value
37
+ self ._global_context [ instance . id ] = value
31
38
32
39
def __getattr__ (self , item ):
33
40
if item in self .STORED :
@@ -37,7 +44,9 @@ def __getattr__(self, item):
37
44
38
45
def render (self , field : str ):
39
46
return (
40
- self ._page .template .render_field (field , self ._context )
47
+ self ._page .template .render_field (
48
+ field , context = self ._global_context [self ._page .id ]
49
+ )
41
50
if self ._page .template
42
51
else getattr (self ._page , field )
43
52
)
0 commit comments