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" %}
|
||||
|
||||
{% load utils %} {# Možná by mohlo být někde výš v hierarchii templatů... #}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td></td> {# Prázdná buňka v levém horním rohu #}
|
||||
{% for p in problemy %}
|
||||
<th> {{ p }} </th>
|
||||
<th>
|
||||
{# TODO: Přehled řešení k problému, odkázaný odsud? #}
|
||||
{{ p }}
|
||||
</th>
|
||||
{% endfor %}
|
||||
</tr>
|
||||
{% for resitel,hodnoty in radky%}
|
||||
<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 %}
|
||||
<td>
|
||||
{% 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 %}
|
||||
</td>
|
||||
{% 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"
|
||||
)
|
||||
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 resitel in hodnoceni.reseni.resitele.all():
|
||||
|
|
Loading…
Reference in a new issue