diff --git a/seminar/views/views_all.py b/seminar/views/views_all.py index 2e9bd864..38ec06f2 100644 --- a/seminar/views/views_all.py +++ b/seminar/views/views_all.py @@ -141,7 +141,34 @@ class TreeNodeView(generic.DetailView): context = super().get_context_data(**kwargs) context['tnldata'] = TNLData.from_treenode(self.object) return context - + +class ProblemView(generic.DetailView): + model = s.Problem + # Zkopírujeme template_name od TreeNodeView, protože jsme prakticky jen trošku upravený TreeNodeView + template_name = TreeNodeView.template_name + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + # Teď potřebujeme doplnit tnldata do kontextu. + # Ošklivý type switch, hezčí by bylo udělat to polymorfni. FIXME. + if False: + # Hezčí formátování zbytku :-P + pass + elif isinstance(self.object, s.Clanek) or isinstance(self.object, s.Konfera): + # Tyhle Problémy mají ŘešeníNode + context['tnldata'] = TNLData.from_treenode(self.object.reseninode) + elif isinstance(self.object, s.Uloha): + # FIXME: Teď vždycky zobrazujeme i vzorák! Možná by bylo hezčí/lepší mít to stejně jako pro Téma: procházet jen dosažitelné z Ročníku / čísla / whatever + tnl_zadani = self.object.ulohazadaninode + tnl_vzorak = self.object.ulohavzoraknode + context['tnldata'] = TNLData.from_tnldata_list([tnl_zadani, tnl_vzorak]) + elif isinstance(self.object, s.Tema): + rocniknode = self.object.rocnik.rocniknode + context['tnldata'] = TNLData.filter_treenode(rocniknode, lambda x: isinstance(x, s.TemaVCisleNode)) + else: + raise ValueError("Obecný problém nejde zobrazit.") + return context + # TODO Co chceme vlastně zobrazovat na této stránce? Zatím je zde aktuální číslo, ale může tu být cokoli jiného... class AktualniZadaniView(TreeNodeView): def get_object(self):