Browse Source

Rozcestnik tematek - odkazy

export_seznamu_prednasek
Martin Z. (Zimamazim) 5 years ago
parent
commit
9a0d229f9a
  1. 41
      seminar/models.py
  2. 6
      seminar/templates/seminar/tematka/rozcestnik.html
  3. 4
      seminar/urls.py
  4. 12
      seminar/views.py

41
seminar/models.py

@ -23,7 +23,7 @@ from reversion import revisions as reversion
from seminar.utils import roman, FirstTagParser # Pro získání úryvku z TextNode from seminar.utils import roman, FirstTagParser # Pro získání úryvku z TextNode
from unidecode import unidecode from unidecode import unidecode # Používám pro získání ID odkazu (ještě je to někde po někom zakomentované)
from polymorphic.models import PolymorphicModel from polymorphic.models import PolymorphicModel
@ -620,7 +620,7 @@ class Problem(SeminarModelBase,PolymorphicModel):
id = models.AutoField(primary_key = True) id = models.AutoField(primary_key = True)
# Název # Název
nazev = models.CharField('název', max_length=256) nazev = models.CharField('název', max_length=256) # Zveřejnitelný na stránky
# Problém má podproblémy # Problém má podproblémy
nadproblem = models.ForeignKey('self', verbose_name='nadřazený problém', nadproblem = models.ForeignKey('self', verbose_name='nadřazený problém',
@ -1243,7 +1243,7 @@ class TreeNode(PolymorphicModel):
nazev = models.TextField("název tohoto node", nazev = models.TextField("název tohoto node",
help_text = "Tento název se zobrazuje v nabídkách pro výběr vhodného TreeNode", help_text = "Tento název se zobrazuje v nabídkách pro výběr vhodného TreeNode",
blank=False, blank=False,
null=True) null=True) # Nezveřejnitelný název na stránky - pouze do adminu
zajimave = models.BooleanField(default = False, zajimave = models.BooleanField(default = False,
verbose_name = "Zajímavé", verbose_name = "Zajímavé",
help_text = "Zobrazí se daná věc na rozcestníku témátek") help_text = "Zobrazí se daná věc na rozcestníku témátek")
@ -1258,8 +1258,25 @@ class TreeNode(PolymorphicModel):
if self.succ: if self.succ:
self.succ.print_tree(indent=indent) self.succ.print_tree(indent=indent)
def getOdkaz(self): def getOdkazStr(self): # String na rozcestník
return self.first_child.getOdkaz() return self.first_child.getOdkazStr()
def getOdkaz(self): # ID HTML tagu, na který se bude scrollovat #{{self.getOdkaz}}
# Jsem si vědom, že tu potenciálně vznikají kolize.
# Přijdou mi natolik nepravděpodobné, že je neřeším
# Chtěl jsem ale hezké odkazy
string = unidecode(self.getOdkazStr())
returnVal = ""
i = 0
while len(returnVal) < 16: # Max 15 znaků
if i == len(string):
break
if string[i] == " ":
returnVal += "-"
if string[i].isalnum():
returnVal += string[i].lower()
i += 1
return returnVal
def __str__(self): def __str__(self):
if self.nazev: if self.nazev:
@ -1296,7 +1313,7 @@ class CisloNode(TreeNode):
def aktualizuj_nazev(self): def aktualizuj_nazev(self):
self.nazev = "CisloNode: "+str(self.cislo) self.nazev = "CisloNode: "+str(self.cislo)
def getOdkaz(self): def getOdkazStr(self):
return "Číslo " + str(self.cislo) return "Číslo " + str(self.cislo)
class MezicisloNode(TreeNode): class MezicisloNode(TreeNode):
@ -1320,7 +1337,7 @@ class MezicisloNode(TreeNode):
else: else:
print("!!!!! Nějaké neidentifikované mezičíslo !!!!!") print("!!!!! Nějaké neidentifikované mezičíslo !!!!!")
self.nazev = "MezicisloNode: Neidentifikovatelné mezičíslo!" self.nazev = "MezicisloNode: Neidentifikovatelné mezičíslo!"
def getOdkaz(self): def getOdkazStr(self):
return "Obsah dostupný pouze na webu" return "Obsah dostupný pouze na webu"
class TemaVCisleNode(TreeNode): class TemaVCisleNode(TreeNode):
@ -1336,7 +1353,7 @@ class TemaVCisleNode(TreeNode):
def aktualizuj_nazev(self): def aktualizuj_nazev(self):
self.nazev = "TemaVCisleNode: "+str(self.tema) self.nazev = "TemaVCisleNode: "+str(self.tema)
def getOdkaz(self): def getOdkazStr(self):
return str(self.tema) return str(self.tema)
class KonferaNode(TreeNode): class KonferaNode(TreeNode):
@ -1367,7 +1384,7 @@ class ClanekNode(TreeNode):
def aktualizuj_nazev(self): def aktualizuj_nazev(self):
self.nazev = "ClanekNode: "+str(self.clanek) self.nazev = "ClanekNode: "+str(self.clanek)
def getOdkaz(self): def getOdkazStr(self):
return str(self.clanek) return str(self.clanek)
@ -1385,7 +1402,7 @@ class UlohaZadaniNode(TreeNode):
def aktualizuj_nazev(self): def aktualizuj_nazev(self):
self.nazev = "UlohaZadaniNode: "+str(self.uloha) self.nazev = "UlohaZadaniNode: "+str(self.uloha)
def getOdkaz(self): def getOdkazStr(self):
return str(self.uloha) return str(self.uloha)
@ -1416,7 +1433,7 @@ class UlohaVzorakNode(TreeNode):
def aktualizuj_nazev(self): def aktualizuj_nazev(self):
self.nazev = "UlohaVzorakNode: "+str(self.uloha) self.nazev = "UlohaVzorakNode: "+str(self.uloha)
def getOdkaz(self): def getOdkazStr(self):
return str(self.uloha) return str(self.uloha)
@ -1432,7 +1449,7 @@ class TextNode(TreeNode):
def aktualizuj_nazev(self): def aktualizuj_nazev(self):
self.nazev = "TextNode: "+str(self.text) self.nazev = "TextNode: "+str(self.text)
def getOdkaz(self): def getOdkazStr(self):
return str(self.text) return str(self.text)

6
seminar/templates/seminar/tematka/rozcestnik.html

@ -1,12 +1,12 @@
{% for tematko in tematka %} {% for tematko in tematka %}
<h1>TEMA</h1> <h1>{{tematko.nazev}}</h1>
<p>{{tematko.abstrakt}}</p> <p>{{tematko.abstrakt}}</p>
<ul> <ul>
{% for cislo in tematko.cisla %} {% for cislo in tematko.cisla %}
<li>{{cislo.0}}</li> <li>{{cislo.0.0}} -&gt; /{{tematko.kod}}/#{{cislo.0.1}}</li>
<ul> <ul>
{% for odkaz in cislo.1 %} {% for odkaz in cislo.1 %}
<li>{{odkaz}}</li> <li>{{odkaz.0}} -&gt; /{{tematko.kod}}/#{{odkaz.1}}</li>
{% endfor %} {% endfor %}
</ul> </ul>
{% endfor %} {% endfor %}

4
seminar/urls.py

@ -8,8 +8,8 @@ from django.contrib.auth import views as auth_views
staff_member_required = user_passes_test(lambda u: u.is_staff) staff_member_required = user_passes_test(lambda u: u.is_staff)
urlpatterns = [ urlpatterns = [
# TEMP DEV path('tematka/', views.TemataRozcestnikView),
path('dev_tematka/', views.TemataRozcestnikView), path('tematko/<int:tematko>/', views.TematkoView),
# REDIRECTy # REDIRECTy
path('jak-resit/', RedirectView.as_view(url='/co-je-MaM/jak-resit/')), path('jak-resit/', RedirectView.as_view(url='/co-je-MaM/jak-resit/')),

12
seminar/views.py

@ -121,6 +121,8 @@ def vytahniZLesaSeznam(tematko, koren, pouze_zajimave=False):
returnVal.append((wn, wd)) returnVal.append((wn, wd))
return returnVal return returnVal
def TematkoView(request):
neco
def TemataRozcestnikView(request): def TemataRozcestnikView(request):
print("=============================================") print("=============================================")
@ -130,25 +132,27 @@ def TemataRozcestnikView(request):
for tematko_object in tematka_objects: for tematko_object in tematka_objects:
print("AKTUALNI TEMATKO") print("AKTUALNI TEMATKO")
print(tematko_object.id) print(tematko_object.id)
odkazy = vytahniZLesaSeznam(tematko_object, nastaveni.aktualni_rocnik().rocniknode, pouze_zajimave = True) odkazy = vytahniZLesaSeznam(tematko_object, nastaveni.aktualni_rocnik().rocniknode, pouze_zajimave = True) #Odkazy jsou tuply (node, depth) v listu
print(odkazy) print(odkazy)
cisla = [] cisla = [] # List tuplů (nazev cisla, list odkazů)
vcisle = [] vcisle = []
cislo = None cislo = None
for odkaz in odkazy: for odkaz in odkazy:
if odkaz[1] == 0: if odkaz[1] == 0:
if cislo != None: if cislo != None:
cisla.append((cislo, vcisle)) cisla.append((cislo, vcisle))
cislo = odkaz[0].getOdkaz() cislo = (odkaz[0].getOdkazStr(), odkaz[0].getOdkaz())
vcisle = [] vcisle = []
else: else:
print(odkaz[0].getOdkaz()) print(odkaz[0].getOdkaz())
vcisle.append(odkaz[0].getOdkaz()) vcisle.append((odkaz[0].getOdkazStr(), odkaz[0].getOdkaz()))
if cislo != None: if cislo != None:
cisla.append((cislo, vcisle)) cisla.append((cislo, vcisle))
print(cisla) print(cisla)
tematka.append({ tematka.append({
"kod" : tematko_object.kod,
"nazev" : tematko_object.nazev,
"abstrakt" : tematko_object.abstrakt, "abstrakt" : tematko_object.abstrakt,
"obrazek": tematko_object.obrazek, "obrazek": tematko_object.obrazek,
"cisla" : cisla "cisla" : cisla

Loading…
Cancel
Save