Odevzdávátko: Odkazy z tabulky na seznam řešení daného řešitele
+ Zkrácení tabulky
This commit is contained in:
		
							parent
							
								
									3fd3838e77
								
							
						
					
					
						commit
						96a73c05d4
					
				
					 3 changed files with 43 additions and 3 deletions
				
			
		|  | @ -1,21 +1,31 @@ | ||||||
| {% extends "base.html" %} | {% extends "base.html" %} | ||||||
| 
 | 
 | ||||||
|  | {% load utils %} {# Možná by mohlo být někde výš v hierarchii templatů... #} | ||||||
|  | 
 | ||||||
| {% block content %} | {% block content %} | ||||||
| 
 | 
 | ||||||
| <table> | <table> | ||||||
| 	<tr> | 	<tr> | ||||||
| 		<td></td> {# Prázdná buňka v levém horním rohu #} | 		<td></td> {# Prázdná buňka v levém horním rohu #} | ||||||
| 		{% for p in problemy %} | 		{% for p in problemy %} | ||||||
| 		<th> {{ p }} </th> | 		<th> | ||||||
|  | 			{# TODO: Přehled řešení k problému, odkázaný odsud? #} | ||||||
|  | 			{{ p }} | ||||||
|  | 		</th> | ||||||
| 		{% endfor %} | 		{% endfor %} | ||||||
| 	</tr> | 	</tr> | ||||||
| 	{% for resitel,hodnoty in radky%} | 	{% for resitel,hodnoty in radky%} | ||||||
| 	<tr> | 	<tr> | ||||||
| 		<td> {{ resitel }} </td> | 		<td> | ||||||
|  | 			{# TODO: Chceme mít view i na řešení konkrétního řešitele ke všem problémům? #} | ||||||
|  | 			{{ resitel }} | ||||||
|  | 		</td> | ||||||
| 		{% for hodn in hodnoty %} | 		{% for hodn in hodnoty %} | ||||||
| 			<td> | 			<td> | ||||||
| 			{% if hodn %} | 			{% if hodn %} | ||||||
| 			{{ hodn.pocet_reseni }} řešení<br>{{ hodn.body }} bodů<br>{{ hodn.posledni_odevzdani }} | 			<a href="{% url 'odevzdavatko_reseni_resitele_k_problemu' problem=hodn.problem_id resitel=hodn.resitel_id %}"> | ||||||
|  | 				{{ hodn.pocet_reseni }} řeš.<br>{{ hodn.body }} b<br>{{ hodn.posledni_odevzdani|kratke_datum|default_if_none:"Nikdy"|default:"???"}} | ||||||
|  | 			</a> | ||||||
| 			{% endif %} | 			{% endif %} | ||||||
| 			</td> | 			</td> | ||||||
| 		{% endfor %} | 		{% endfor %} | ||||||
|  |  | ||||||
							
								
								
									
										27
									
								
								seminar/templatetags/utils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								seminar/templatetags/utils.py
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | ||||||
|  | from django import template | ||||||
|  | from datetime import datetime, timedelta | ||||||
|  | from pytz import timezone | ||||||
|  | from mamweb.settings import TIME_ZONE | ||||||
|  | import logging | ||||||
|  | register = template.Library() | ||||||
|  | 
 | ||||||
|  | logger = logging.getLogger(__name__) | ||||||
|  | 
 | ||||||
|  | @register.filter(name='kratke_datum', expects_localtime=True) | ||||||
|  | def kratke_datum(dt): | ||||||
|  | 	# None dává None, ne-datum dává False, aby se daly použít filtry typu "default". | ||||||
|  | 	if dt is None: | ||||||
|  | 		return None | ||||||
|  | 	if not isinstance(dt, datetime): | ||||||
|  | 		logger.warning(f"Špatné volání filtru {__name__}: {dt}") | ||||||
|  | 		return False | ||||||
|  | 	naive_now = datetime.now() | ||||||
|  | 	tz = timezone(TIME_ZONE) | ||||||
|  | 	now = tz.localize(naive_now) | ||||||
|  | 	delta = dt - now | ||||||
|  | 	if delta <= timedelta(days=1): | ||||||
|  | 		return dt.strftime("%k:%M") | ||||||
|  | 	if delta <= timedelta(years=1): | ||||||
|  | 		return dt.strftime("%d. %m.") | ||||||
|  | 	return dt.strftime("%d. %m. %Y") | ||||||
|  | 
 | ||||||
|  | @ -57,6 +57,9 @@ class TabulkaOdevzdanychReseniView(ListView): | ||||||
| 					# FIXME: Možná dává smysl i mít None jako velké číslo -- jakože "TODO: zadat body" | 					# FIXME: Možná dává smysl i mít None jako velké číslo -- jakože "TODO: zadat body" | ||||||
| 					) | 					) | ||||||
| 				tabulka[problem][resitel].pocet_reseni += 1 | 				tabulka[problem][resitel].pocet_reseni += 1 | ||||||
|  | 			# Pro jednoduchost template si ještě poznamenáme ID problému a řešitele | ||||||
|  | 			tabulka[problem][resitel].problem_id = problem.id | ||||||
|  | 			tabulka[problem][resitel].resitel_id = resitel.id | ||||||
| 		 | 		 | ||||||
| 		for hodnoceni in self.get_queryset(): | 		for hodnoceni in self.get_queryset(): | ||||||
| 			for resitel in hodnoceni.reseni.resitele.all(): | 			for resitel in hodnoceni.reseni.resitele.all(): | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Pavel "LEdoian" Turinsky
						Pavel "LEdoian" Turinsky