diff --git a/odevzdavatko/templates/odevzdavatko/detail.html b/odevzdavatko/templates/odevzdavatko/detail.html index 7414b517..7443afa4 100644 --- a/odevzdavatko/templates/odevzdavatko/detail.html +++ b/odevzdavatko/templates/odevzdavatko/detail.html @@ -2,12 +2,26 @@ {% load static %} {% load deadliny %} {% load mail %} +{% load jmena %} {% block content %} {% if edit %} + {% endif %} @@ -40,11 +54,20 @@
Žádné přílohy
{% endif %} diff --git a/odevzdavatko/templatetags/__init__.py b/odevzdavatko/templatetags/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/odevzdavatko/templatetags/jmena.py b/odevzdavatko/templatetags/jmena.py new file mode 100644 index 00000000..9fe91ff5 --- /dev/null +++ b/odevzdavatko/templatetags/jmena.py @@ -0,0 +1,9 @@ +from django import template +register = template.Library() + +from personalni.utils import normalizuj_jmeno +import seminar.models as m # jen kvůli typové anotaci… + +@register.filter +def jmeno_jako_prefix(o: m.Osoba): + return normalizuj_jmeno(o).replace(' ', '_') diff --git a/personalni/utils.py b/personalni/utils.py new file mode 100644 index 00000000..0701d66a --- /dev/null +++ b/personalni/utils.py @@ -0,0 +1,11 @@ +import seminar.models as m +from various.utils import bez_diakritiky_translate +import re + +def normalizuj_jmeno(o: m.Osoba) -> str: + # FIXME: Možná není potřeba vázat na model? + cele_jmeno = f'{o.jmeno} {o.prijmeni}' + cele_jmeno = cele_jmeno.translate(bez_diakritiky_translate) + cele_jmeno = re.sub(r'[^a-zA-Z- ]', '', cele_jmeno) + return cele_jmeno + diff --git a/various/utils.py b/various/utils.py new file mode 100644 index 00000000..5905b2f6 --- /dev/null +++ b/various/utils.py @@ -0,0 +1,33 @@ +bez_diakritiky = ({} + # FIXME: funguje jen pro český a slovenský text, jinak jsou špatně + # transliterace. Potenciální řešení: + # https://stackoverflow.com/questions/517923/what-is-the-best-way-to-remove-accents-normalize-in-a-python-unicode-string + # (ale přidává to další závislosti…) + + # Tisknutelné ASCII + | {chr(a): chr(a) for a in range(32, 126+1)} + + # České, slovenské a blízké diakritiky a divnoznaky + | { x: 'a' for x in 'áÁäÄ'} + | { x: 'c' for x in 'čČ'} + | { x: 'd' for x in 'ďĎ'} + | { x: 'e' for x in 'éÉěĚëË'} + | { x: 'i' for x in 'íÍ'} + | { x: 'l' for x in 'ľĽĺĹ'} + | { x: 'n' for x in 'ňŇ'} + | { x: 'o' for x in 'óÓöÖôÔ'} + | { x: 'r' for x in 'řŘŕŔ'} + | { x: 's' for x in 'šŠßẞ'} + | { x: 't' for x in 'ťŤ'} + | { x: 'u' for x in 'úÚůŮ'} + | { x: 'y' for x in 'ýÝ'} + | { x: 'z' for x in 'žŽ'} + ) + +# Tabulka pro str.translate +class _bez_diakritiky_translate: + def __getitem__(self, it): + return ord(bez_diakritiky.get(chr(it), None)) +bez_diakritiky_translate = _bez_diakritiky_translate() + +# TODO: testy?