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 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,9 +1258,26 @@ 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: | ||||||
| 			return self.nazev | 			return 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) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -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}} -> /{{tematko.kod}}/#{{cislo.0.1}}</li> | ||||||
| 		<ul> | 		<ul> | ||||||
| 		{% for odkaz in cislo.1 %} | 		{% for odkaz in cislo.1 %} | ||||||
| 			<li>{{odkaz}}</li>	 | 			<li>{{odkaz.0}} -> /{{tematko.kod}}/#{{odkaz.1}}</li>	 | ||||||
| 		{% endfor %} | 		{% endfor %} | ||||||
| 		</ul> | 		</ul> | ||||||
| 	{% endfor %} | 	{% 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) | 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/')), | ||||||
|  |  | ||||||
|  | @ -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…
	
		Reference in a new issue
	
	 Martin Z. (Zimamazim)
						Martin Z. (Zimamazim)