Rozcestnik tematek - odkazy
This commit is contained in:
		
							parent
							
								
									0b40d04fad
								
							
						
					
					
						commit
						9a0d229f9a
					
				
					 4 changed files with 43 additions and 22 deletions
				
			
		|  | @ -23,7 +23,7 @@ from reversion import revisions as reversion | |||
| 
 | ||||
| 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 | ||||
| 
 | ||||
|  | @ -620,7 +620,7 @@ class Problem(SeminarModelBase,PolymorphicModel): | |||
| 	id = models.AutoField(primary_key = True) | ||||
| 
 | ||||
| 	# 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 | ||||
| 	nadproblem = models.ForeignKey('self', verbose_name='nadřazený problém', | ||||
|  | @ -1243,7 +1243,7 @@ class TreeNode(PolymorphicModel): | |||
| 	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", | ||||
| 		blank=False,  | ||||
| 		null=True) | ||||
| 		null=True) # Nezveřejnitelný název na stránky - pouze do adminu | ||||
| 	zajimave = models.BooleanField(default = False, | ||||
| 		verbose_name = "Zajímavé", | ||||
| 		help_text = "Zobrazí se daná věc na rozcestníku témátek") | ||||
|  | @ -1258,9 +1258,26 @@ class TreeNode(PolymorphicModel): | |||
| 		if self.succ: | ||||
| 			self.succ.print_tree(indent=indent) | ||||
| 
 | ||||
| 	def getOdkaz(self): | ||||
| 		return self.first_child.getOdkaz() | ||||
| 	 | ||||
| 	def getOdkazStr(self): # String na rozcestník | ||||
| 		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): | ||||
| 		if self.nazev: | ||||
| 			return self.nazev | ||||
|  | @ -1296,7 +1313,7 @@ class CisloNode(TreeNode): | |||
| 	def aktualizuj_nazev(self): | ||||
| 		self.nazev = "CisloNode: "+str(self.cislo) | ||||
| 
 | ||||
| 	def getOdkaz(self): | ||||
| 	def getOdkazStr(self): | ||||
| 		return "Číslo " + str(self.cislo) | ||||
| 
 | ||||
| class MezicisloNode(TreeNode): | ||||
|  | @ -1320,7 +1337,7 @@ class MezicisloNode(TreeNode): | |||
| 		else: | ||||
| 			print("!!!!! Nějaké neidentifikované mezičíslo !!!!!") | ||||
| 			self.nazev = "MezicisloNode: Neidentifikovatelné mezičíslo!" | ||||
| 	def getOdkaz(self): | ||||
| 	def getOdkazStr(self): | ||||
| 		return "Obsah dostupný pouze na webu" | ||||
| 
 | ||||
| class TemaVCisleNode(TreeNode): | ||||
|  | @ -1336,7 +1353,7 @@ class TemaVCisleNode(TreeNode): | |||
| 	def aktualizuj_nazev(self): | ||||
| 		self.nazev = "TemaVCisleNode: "+str(self.tema) | ||||
| 
 | ||||
| 	def getOdkaz(self): | ||||
| 	def getOdkazStr(self): | ||||
| 		return str(self.tema) | ||||
| 
 | ||||
| class KonferaNode(TreeNode): | ||||
|  | @ -1367,7 +1384,7 @@ class ClanekNode(TreeNode): | |||
| 	def aktualizuj_nazev(self): | ||||
| 		self.nazev = "ClanekNode: "+str(self.clanek) | ||||
| 
 | ||||
| 	def getOdkaz(self): | ||||
| 	def getOdkazStr(self): | ||||
| 		return str(self.clanek) | ||||
| 
 | ||||
| 
 | ||||
|  | @ -1385,7 +1402,7 @@ class UlohaZadaniNode(TreeNode): | |||
| 	def aktualizuj_nazev(self): | ||||
| 		self.nazev = "UlohaZadaniNode: "+str(self.uloha) | ||||
| 
 | ||||
| 	def getOdkaz(self): | ||||
| 	def getOdkazStr(self): | ||||
| 		return str(self.uloha) | ||||
| 
 | ||||
| 
 | ||||
|  | @ -1416,7 +1433,7 @@ class UlohaVzorakNode(TreeNode): | |||
| 	def aktualizuj_nazev(self): | ||||
| 		self.nazev = "UlohaVzorakNode: "+str(self.uloha) | ||||
| 
 | ||||
| 	def getOdkaz(self): | ||||
| 	def getOdkazStr(self): | ||||
| 		return str(self.uloha) | ||||
| 
 | ||||
| 
 | ||||
|  | @ -1432,7 +1449,7 @@ class TextNode(TreeNode): | |||
| 	def aktualizuj_nazev(self): | ||||
| 		self.nazev = "TextNode: "+str(self.text) | ||||
| 
 | ||||
| 	def getOdkaz(self): | ||||
| 	def getOdkazStr(self): | ||||
| 		return str(self.text) | ||||
| 
 | ||||
| 
 | ||||
|  |  | |||
|  | @ -1,12 +1,12 @@ | |||
| {% for tematko in tematka %} | ||||
| <h1>TEMA</h1> | ||||
| <h1>{{tematko.nazev}}</h1> | ||||
| <p>{{tematko.abstrakt}}</p> | ||||
| 	<ul> | ||||
| 	{% for cislo in tematko.cisla %} | ||||
| 		<li>{{cislo.0}}</li> | ||||
| 		<li>{{cislo.0.0}} -> /{{tematko.kod}}/#{{cislo.0.1}}</li> | ||||
| 		<ul> | ||||
| 		{% for odkaz in cislo.1 %} | ||||
| 			<li>{{odkaz}}</li>	 | ||||
| 			<li>{{odkaz.0}} -> /{{tematko.kod}}/#{{odkaz.1}}</li>	 | ||||
| 		{% endfor %} | ||||
| 		</ul> | ||||
| 	{% endfor %} | ||||
|  |  | |||
|  | @ -8,8 +8,8 @@ from django.contrib.auth import views as auth_views | |||
| staff_member_required = user_passes_test(lambda u: u.is_staff) | ||||
| 
 | ||||
| urlpatterns = [ | ||||
|   # TEMP DEV | ||||
|   path('dev_tematka/', views.TemataRozcestnikView), | ||||
|   path('tematka/', views.TemataRozcestnikView), | ||||
|   path('tematko/<int:tematko>/', views.TematkoView), | ||||
| 
 | ||||
| 	# REDIRECTy | ||||
| 	path('jak-resit/', RedirectView.as_view(url='/co-je-MaM/jak-resit/')), | ||||
|  |  | |||
|  | @ -121,6 +121,8 @@ def vytahniZLesaSeznam(tematko, koren, pouze_zajimave=False): | |||
| 			returnVal.append((wn, wd)) | ||||
| 	return returnVal | ||||
|    | ||||
| def TematkoView(request): | ||||
| 	neco | ||||
| 
 | ||||
| def TemataRozcestnikView(request): | ||||
| 	print("=============================================") | ||||
|  | @ -130,25 +132,27 @@ def TemataRozcestnikView(request): | |||
| 	for tematko_object in tematka_objects: | ||||
| 		print("AKTUALNI TEMATKO") | ||||
| 		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) | ||||
| 		cisla = [] | ||||
| 		cisla = [] # List tuplů (nazev cisla, list odkazů) | ||||
| 		vcisle = [] | ||||
| 		cislo = None | ||||
| 		for odkaz	in odkazy: | ||||
| 			if odkaz[1] == 0: | ||||
| 				if cislo != None: | ||||
| 					cisla.append((cislo, vcisle)) | ||||
| 				cislo = odkaz[0].getOdkaz() | ||||
| 				cislo = (odkaz[0].getOdkazStr(), odkaz[0].getOdkaz()) | ||||
| 				vcisle = [] | ||||
| 			else: | ||||
| 				print(odkaz[0].getOdkaz()) | ||||
| 				vcisle.append(odkaz[0].getOdkaz()) | ||||
| 				vcisle.append((odkaz[0].getOdkazStr(), odkaz[0].getOdkaz())) | ||||
| 		if cislo != None: | ||||
| 			cisla.append((cislo, vcisle)) | ||||
| 				 | ||||
| 		print(cisla) | ||||
| 		tematka.append({ | ||||
| 			"kod" : tematko_object.kod, | ||||
| 			"nazev" : tematko_object.nazev, | ||||
| 			"abstrakt" : tematko_object.abstrakt,  | ||||
| 			"obrazek": tematko_object.obrazek, | ||||
| 			"cisla" : cisla | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Martin Z. (Zimamazim)
						Martin Z. (Zimamazim)