@@ -21,6 +21,17 @@ def get_redirect_url(self, *, url_name: str, **kwargs):
2121class KlassDetailView (TemplateView ):
2222 template_name = "cbv/klass_detail.html"
2323
24+ @attrs .frozen
25+ class Ancestor :
26+ name : str
27+ url : str
28+ is_direct : bool
29+
30+ @attrs .frozen
31+ class Child :
32+ name : str
33+ url : str
34+
2435 def get_context_data (self , ** kwargs ):
2536 qs = Klass .objects .filter (
2637 name__iexact = self .kwargs ["klass" ],
@@ -45,9 +56,25 @@ def get_context_data(self, **kwargs):
4556 nav = nav_builder .get_nav_data (
4657 klass .module .project_version , klass .module , klass
4758 )
59+ direct_ancestors = list (klass .get_ancestors ())
60+ ancestors = [
61+ self .Ancestor (
62+ name = ancestor .name ,
63+ url = ancestor .get_absolute_url (),
64+ is_direct = ancestor in direct_ancestors ,
65+ )
66+ for ancestor in klass .get_all_ancestors ()
67+ ]
68+ children = [
69+ self .Child (
70+ name = child .name ,
71+ url = child .get_absolute_url (),
72+ )
73+ for child in klass .get_all_children ()
74+ ]
4875 return {
49- "all_ancestors" : list ( klass . get_all_ancestors ()) ,
50- "all_children" : list ( klass . get_all_children ()) ,
76+ "all_ancestors" : ancestors ,
77+ "all_children" : children ,
5178 "attributes" : klass .get_prepared_attributes (),
5279 "canonical_url" : self .request .build_absolute_uri (canonical_url_path ),
5380 "klass" : klass ,
@@ -142,6 +169,17 @@ def get_context_data(self, **kwargs):
142169 }
143170
144171
172+ @attrs .frozen
173+ class DjangoClassListItem :
174+ docstring : str
175+ is_secondary : bool
176+ name : str
177+ module_long_name : str
178+ module_name : str
179+ module_short_name : str
180+ url : str
181+
182+
145183class VersionDetailView (TemplateView ):
146184 template_name = "cbv/version_detail.html"
147185
@@ -157,11 +195,20 @@ def get_context_data(self, **kwargs):
157195 nav = nav_builder .get_nav_data (project_version )
158196 return {
159197 "nav" : nav ,
160- "object_list" : list (
161- Klass .objects .filter (
198+ "object_list" : [
199+ DjangoClassListItem (
200+ docstring = class_ .docstring ,
201+ is_secondary = class_ .is_secondary (),
202+ name = class_ .name ,
203+ module_long_name = class_ .module .long_name ,
204+ module_name = class_ .module .name ,
205+ module_short_name = class_ .module .short_name ,
206+ url = class_ .get_absolute_url (),
207+ )
208+ for class_ in Klass .objects .filter (
162209 module__project_version = project_version
163210 ).select_related ("module__project_version" )
164- ) ,
211+ ] ,
165212 "project" : f"Django { project_version .version_number } " ,
166213 "version_switcher" : version_switcher ,
167214 }
@@ -177,11 +224,20 @@ def get_context_data(self, **kwargs):
177224 nav = nav_builder .get_nav_data (project_version )
178225 return {
179226 "nav" : nav ,
180- "object_list" : list (
181- Klass .objects .filter (
227+ "object_list" : [
228+ DjangoClassListItem (
229+ docstring = class_ .docstring ,
230+ is_secondary = class_ .is_secondary (),
231+ name = class_ .name ,
232+ module_long_name = class_ .module .long_name ,
233+ module_name = class_ .module .name ,
234+ module_short_name = class_ .module .short_name ,
235+ url = class_ .get_absolute_url (),
236+ )
237+ for class_ in Klass .objects .filter (
182238 module__project_version = project_version
183239 ).select_related ("module__project_version" )
184- ) ,
240+ ] ,
185241 "project" : f"Django { project_version .version_number } " ,
186242 "version_switcher" : version_switcher ,
187243 }
0 commit comments