From 322718f436cd7fab5defca3db0631537eff0961c Mon Sep 17 00:00:00 2001 From: Anet Date: Thu, 30 Apr 2020 02:02:05 +0200 Subject: [PATCH 01/14] =?UTF-8?q?treelib:=20p=C5=99idan=C3=A9=20funkce=20i?= =?UTF-8?q?nsert=5Flast=5Fchild,=20get=5Flast=5Fchild=20a=20is=5Forphan?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/treelib.py | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/seminar/treelib.py b/seminar/treelib.py index 260a8bac..854bf62c 100644 --- a/seminar/treelib.py +++ b/seminar/treelib.py @@ -12,6 +12,13 @@ def print_tree(node,indent=0): if node.succ: print_tree(node.succ, indent=indent) +def is_orphan(node): + """ Zjišťuje, jestli už je daný Node někde pověšený či nikoli. """ + if safe_father_of_first(node) is None and safe_pred(node) is None: + return True + else: + return False + # Django je trošku hloupé, takže node.prev nevrací None, ale hází django.core.exceptions.ObjectDoesNotExist def safe_pred(node): try: @@ -43,6 +50,13 @@ def get_parent(node): # ... a z prvního potomka umíme najít rodiče return safe_father_of_first(node) +def get_last_child(node): + first = node.first_child + if first is None: + return None + else: + return last_brother(first) + # Obecný next: další Node v "the-right-order" pořadí (já, pak potomci, pak sousedé) def general_next(node): # Máme potomka? @@ -100,12 +114,19 @@ def all_proper_brothers(node): continue yield br -# Generátor potomků def all_children(node): + """ Generátor všech potomků zadaného Node. """ brothers = all_brothers(node.first_child) for br in brothers: yield br +def all_children_of_type(node, type): + """ Generuje všechny potomky daného Node a daného typu. """ + brothers = all_brothers(node.first_child) + for br in brothers: + if isinstance(br, type): + yield br + # Generátor následníků v "the-right-order" # Bez tohoto vrcholu def all_following(node): @@ -173,6 +194,24 @@ def create_child(parent, type, **kwargs): new_node.succ = orig_child new_node.save() +def insert_last_child(parent, node): + """ Zadaný Node přidá jako posledního potomka otce. """ + last = get_last_child(parent) + if not is_orphan(node): + print(safe_pred(node)) + print(safe_father_of_first(node)) + if len(safe_father_of_first(node).get_real_instances()) == 0: + print("Related Manager je prázdný.") + print(type(safe_father_of_first(node).queryset_class)) + raise TreeLibError("Snažíš se přidat do stromu Node, který už je zavěšený.") + + if last is None: + parent.first_child = node + parent.save() + else: + last.succ = node + last.save() + def create_node_before(successor, type, **kwargs): if safe_pred(successor) is not None: # Easy: přidáme za předchůdce From ef62622be37a5f3bb1ec14a3a21bda024b511e13 Mon Sep 17 00:00:00 2001 From: Anet Date: Thu, 30 Apr 2020 02:02:37 +0200 Subject: [PATCH 02/14] =?UTF-8?q?models:=20zm=C4=9Bna=20TreeNode.first=5Fc?= =?UTF-8?q?hild=20na=20OneToOneField=20m=C3=ADsto=20ForeignKey=20(kv=C5=AF?= =?UTF-8?q?li=20funk=C4=8Dnosti=20vazby=20v=20opa=C4=8Dn=C3=A9m=20sm=C4=9B?= =?UTF-8?q?ru=20-=20jinak=20vrac=C3=AD=20RelatedManager=20fuj=20fuj=20fuj)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/seminar/models.py b/seminar/models.py index 57d4304a..43d6e59d 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -1246,7 +1246,7 @@ class TreeNode(PolymorphicModel): blank = False, on_delete = models.SET_NULL, # Vrcholy s null kořenem jsou sirotci bez ročníku verbose_name="kořen stromu") - first_child = models.ForeignKey('TreeNode', + first_child = models.OneToOneField('TreeNode', related_name='father_of_first', null = True, blank = True, From 4240fa787fb44c741eb09373325490a53b4d9f28 Mon Sep 17 00:00:00 2001 From: Anet Date: Thu, 30 Apr 2020 02:03:41 +0200 Subject: [PATCH 03/14] =?UTF-8?q?testutils:=20zkr=C3=A1cen=C3=AD=20a=20roz?= =?UTF-8?q?sek=C3=A1n=C3=AD=20funkce=20gen=5Fulohy=5Fk=5Ftematum?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/testutils.py | 169 +++++++++++++++++++------------------------ 1 file changed, 74 insertions(+), 95 deletions(-) diff --git a/seminar/testutils.py b/seminar/testutils.py index b562bf74..34010168 100644 --- a/seminar/testutils.py +++ b/seminar/testutils.py @@ -13,6 +13,8 @@ from seminar.models import Skola, Resitel, Rocnik, Cislo, Problem, Reseni, Prilo from django.contrib.flatpages.models import FlatPage from django.contrib.sites.models import Site +from seminar.treelib import all_children, insert_last_child, all_children_of_type + User = django.contrib.auth.get_user_model() zlinska = None # tohle bude speciální škola, které později dodáme kontaktní osobu @@ -189,7 +191,7 @@ def gen_zadani_ulohy(rnd, cisla, organizatori, pocet_oboru, poradi_cisla, poradi jmeno = ["řešení", "tahů", "čísel", "kalhot", "koulí", "hadů"] kde = ["na zemi", "ve vesmíru", "ve vzduchu", "na šňůře", "v letadle"] obory = ["M", "F", "I", "O", "B"] - + p = Uloha.objects.create( # atributy třídy Problem nazev=" ".join([rnd.choice(jaka), rnd.choice(co)]), @@ -205,21 +207,16 @@ def gen_zadani_ulohy(rnd, cisla, organizatori, pocet_oboru, poradi_cisla, poradi max_body = rnd.randint(1, 8) ) - text_zadani = Text.objects.create( - na_web = " ".join( - [rnd.choice(sloveso), - rnd.choice(koho), - rnd.choice(ceho), - rnd.choice(jmeno), - rnd.choice(kde)] - ), - do_cisla = " ".join( + text = " ".join( [rnd.choice(sloveso), rnd.choice(koho), rnd.choice(ceho), rnd.choice(jmeno), rnd.choice(kde)] ) + text_zadani = Text.objects.create( + na_web = text, + do_cisla = text, ) zad = TextNode.objects.create(text = text_zadani) uloha_zadani = UlohaZadaniNode.objects.create(uloha = p, first_child = zad) @@ -228,7 +225,7 @@ def gen_zadani_ulohy(rnd, cisla, organizatori, pocet_oboru, poradi_cisla, poradi return p -def gen_vzoroveho_reseni_ulohy(rnd, cisla, organizatori, uloha, pocet_opravovatelu, poradi_cisla): +def gen_vzoroveho_reseni_ulohy(rnd, organizatori, uloha, pocet_opravovatelu): reseni = ["to je přece jasné", "triviální", "omlouváme se," "otevřený problém", "neřešitelné", "triviálně triviální", "použitím věty z prvního semestru na matfyzu", @@ -238,18 +235,18 @@ def gen_vzoroveho_reseni_ulohy(rnd, cisla, organizatori, uloha, pocet_opravovate "tak jste fakt hloupí"] # Generování vzorového řešení. + obsah = rnd.choice(reseni) text_vzoraku = Text.objects.create( - na_web = rnd.choice(reseni), - do_cisla = rnd.choice(reseni) + na_web = obsah, + do_cisla = obsah ) vzorak = TextNode.objects.create(text = text_vzoraku) uloha_vzorak = UlohaVzorakNode.objects.create(uloha = uloha, first_child = vzorak) uloha.ulohavzoraknode = uloha_vzorak - otec_syn(cisla[poradi_cisla-1].cislonode, uloha_vzorak) uloha.opravovatele.set(rnd.sample(organizatori, pocet_opravovatelu)) uloha.save() - return + return uloha_vzorak def gen_reseni_ulohy(rnd, cisla, uloha, pocet_resitelu, poradi_cisla, resitele_cisla, resitele): @@ -307,7 +304,10 @@ def gen_ulohy_do_cisla(rnd, organizatori, resitele, rocnik_cisla, rocniky, size) # přivěšení pod dané číslo p = gen_zadani_ulohy(rnd, cisla, organizatori, poc_oboru, ci, pi) # Generování vzorového řešení - gen_vzoroveho_reseni_ulohy(rnd, cisla, organizatori, p, poc_op, ci) + uloha_vzorak = gen_vzoroveho_reseni_ulohy(rnd, organizatori, + p, poc_op) + insert_last_child(cisla[ci-1].cislonode, uloha_vzorak) + # Generování řešení a hodnocení k úloze gen_reseni_ulohy(rnd, cisla, p, poc_res, ci, resitele_cisla, resitele) @@ -474,11 +474,10 @@ def gen_temata(rnd, rocniky, rocnik_cisla, organizatori): rocnik_temata.append(letosni_temata) return rocnik_temata - -def gen_ulohy_k_tematum(rnd, rocniky, rocnik_cisla, rocnik_temata, organizatori): - logger.info('Generuji úlohy k tématům...') - - # ulohy resene v cisle +def gen_ulohy_tematu(rnd, organizatori, tema, kod, cislo, cislo_se_vzorakem): + """ Generování úlohy k danému tématu. """ + + # Proměnné pro náhodné generování názvů a zadání. jaka = ["Šachová", "Černá", "Větrná", "Dlouhá", "Křehká", "Rychlá", "Zákeřná", "Fyzikální"] co = ["kostka", "smršť", "díra", "zrada", "toulka", "tyč", @@ -488,14 +487,45 @@ def gen_ulohy_k_tematum(rnd, rocniky, rocnik_cisla, rocnik_temata, organizatori) ceho = ["všech", "správných", "konstatních", "zelených"] jmeno = ["řešení", "tahů", "čísel", "kalhot", "koulí", "hadů"] kde = ["na zemi", "ve vesmíru", "ve vzduchu", "na šňůře", "v letadle"] - obor = ["M", "F", "I", "O", "B"] - reseni = ["to je přece jasné", "triviální", "omlouváme se," - "otevřený problém", "neřešitelné", "triviálně triviální", - "použitím věty z prvního semestru na matfyzu", - "jednoduše pomocí látky z druhého semestru na matfyzu", - "netriviální aplikace diferenciálních rovnic", "zadání je vnitřně" - "sporné", "nepopsatelně jednoduché", "pokud jste na to nepřišli," - "tak jste fakt hloupí"] + obory = ["M", "F", "I", "O", "B"] + + uloha = Uloha.objects.create( + nazev=": ".join([tema.nazev, + "úloha {}.".format(kod)]), + nadproblem=tema, + stav=Problem.STAV_ZADANY, + zamereni=tema.zamereni, + autor=tema.autor, + garant=tema.garant, + kod=str(kod), + cislo_zadani=cislo, + cislo_reseni=cislo_se_vzorakem, + cislo_deadline=cislo_se_vzorakem, + max_body = rnd.randint(1, 8) + ) + + # Samotný obsah následně vzniklého Textu zadání + obsah = " ".join( + [rnd.choice(sloveso), + rnd.choice(koho), + rnd.choice(ceho), + rnd.choice(jmeno), + rnd.choice(kde)] + ) + text_zadani = Text.objects.create( + na_web = obsah, + do_cisla = obsah, + ) + zad = TextNode.objects.create(text = text_zadani) + uloha_zadani = UlohaZadaniNode.objects.create(uloha=uloha, first_child = zad) + uloha.ulohazadaninode = uloha_zadani + + return uloha, uloha_zadani + + +def gen_ulohy_k_tematum(rnd, rocniky, rocnik_cisla, rocnik_temata, organizatori): + logger.info('Generuji úlohy k tématům...') + # Ke každému ročníku si vezmeme příslušná čísla a témata for rocnik, cisla, temata in zip(rocniky, rocnik_cisla, rocnik_temata): # Do každého čísla nagenerujeme ke každému témátku pár úložek @@ -515,19 +545,7 @@ def gen_ulohy_k_tematum(rnd, rocniky, rocnik_cisla, rocnik_temata, organizatori) else: cislo_se_vzorakem = cislo_se_vzorakem.first() - # FIXME: Tenhle generátor dát asi někam jinam - def potomci(node): - if not isinstance(node, TreeNode): - raise ValueError("Typ {} nemá potomky", type(node)) - current_child = node.first_child - while current_child is not None: - yield current_child - current_child = current_child.succ - - for mozna_tema_node in potomci(cislo.cislonode): - if not isinstance(mozna_tema_node, TemaVCisleNode): - continue - tema_node = mozna_tema_node + for tema_node in all_children_of_type(cislo.cislonode, TemaVCisleNode): tema = tema_node.tema # Pokud už témátko skončilo, žádné úložky negenerujeme @@ -536,65 +554,26 @@ def gen_ulohy_k_tematum(rnd, rocniky, rocnik_cisla, rocnik_temata, organizatori) if not temata[int(tema.kod)-1][1] >= int(cislo_se_vzorakem.poradi): continue - # Generujeme 1 až 4 úložky k tomuto témátku do tohoto čísla + # Generujeme 1 až 4 úložky k tomuto témátku do tohoto čísla. for kod in range(1, rnd.randint(1, 4)): - u = Uloha.objects.create( - nazev=": ".join([tema.nazev, - "úloha {}.".format(kod)]), - nadproblem=tema, - stav=Problem.STAV_ZADANY, - zamereni=tema.zamereni, - autor=tema.autor, - garant=tema.garant, - kod=str(kod), - cislo_zadani=cislo, - cislo_reseni=cislo_se_vzorakem, - cislo_deadline=cislo_se_vzorakem, - max_body = rnd.randint(1, 8) - ) - - poc_opravovatelu = rnd.randint(1, 4) - u.opravovatele.set(rnd.sample(organizatori, poc_opravovatelu)) - - # Samotný obsah následně vzniklého Textu zadání - obsah = " ".join( - [rnd.choice(sloveso), - rnd.choice(koho), - rnd.choice(ceho), - rnd.choice(jmeno), - rnd.choice(kde)] - ) - text_zadani = Text.objects.create( - na_web = obsah, - do_cisla = obsah, - ) - zad = TextNode.objects.create(text = text_zadani) - uloha_zadani = UlohaZadaniNode.objects.create(uloha=u, first_child = zad) - u.ulohazadaninode = uloha_zadani - - # FIXME: Tohle dává zadání vždy jako prvního potomka témátka, spec. se naskládají v opačném pořadí a nemůže mezi nimi vzniknout žádný (orgo-)text - otec_syn(tema_node, uloha_zadani) - - # Text vzoráku stejně - obsah = rnd.choice(reseni) - text_vzoraku = Text.objects.create( - na_web = obsah, - do_cisla = obsah, - ) - vzorak = TextNode.objects.create(text = text_vzoraku) - uloha_vzorak = UlohaVzorakNode.objects.create(uloha=u, first_child = vzorak) - u.UlohaVzorakNode = uloha_vzorak + u, uz = gen_ulohy_tematu(rnd, organizatori, tema, kod, + cislo, cislo_se_vzorakem) + insert_last_child(tema_node, uz) + + poc_op = rnd.randint(1, 4) + uvz = gen_vzoroveho_reseni_ulohy(rnd, organizatori, + u, poc_op) + # Najdeme správný TemaVCisleNode pro vložení vzoráku res_tema_node = None; - for node in potomci(cislo_se_vzorakem.cislonode): - if isinstance(node, TemaVCisleNode) and node.tema == tema: - res_tema_node = node + for node in all_children(cislo_se_vzorakem.cislonode): + if isinstance(node, TemaVCisleNode): + if node.tema == tema: + res_tema_node = node if res_tema_node is None: raise LookupError("Nenalezen Node pro vložení vzoráku") - # FIXME: Stejný problém jako výše: vzoráky se dají na začátek v opačném pořadí. - otec_syn(res_tema_node, uloha_vzorak) - + insert_last_child(res_tema_node, uvz) u.save() return From 572ed79615b3000c3ccac1adaea30778fcd4f690 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C=C3=AD=C5=BEkov=C3=A1?= Date: Wed, 6 May 2020 22:43:39 +0200 Subject: [PATCH 04/14] =?UTF-8?q?galerie=20=C5=A1ipky?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- galerie/static/galerie/prvky/dalsi.svg | 36 ++++++++++++++++++-- galerie/static/galerie/prvky/predchozi.svg | 38 +++++++++++++++++++--- 2 files changed, 67 insertions(+), 7 deletions(-) diff --git a/galerie/static/galerie/prvky/dalsi.svg b/galerie/static/galerie/prvky/dalsi.svg index bd3274b6..e928adb2 100644 --- a/galerie/static/galerie/prvky/dalsi.svg +++ b/galerie/static/galerie/prvky/dalsi.svg @@ -5,11 +5,39 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="25.135418mm" height="42.333332mm" viewBox="0 0 25.135418 42.333331" version="1.1" - id="svg851"> + id="svg851" + sodipodi:docname="dalsi.svg" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> + + + + id="path44-3" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccccc" /> diff --git a/galerie/static/galerie/prvky/predchozi.svg b/galerie/static/galerie/prvky/predchozi.svg index af139f7e..b7a491ed 100644 --- a/galerie/static/galerie/prvky/predchozi.svg +++ b/galerie/static/galerie/prvky/predchozi.svg @@ -5,11 +5,39 @@ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="25.135418mm" height="42.333332mm" viewBox="0 0 25.135418 42.333331" version="1.1" - id="svg851"> + id="svg851" + sodipodi:docname="predchozi.svg" + inkscape:version="0.92.4 (5da689c313, 2019-01-14)"> + + + + transform="matrix(1.0282842,0,0,1,-86.319083,-88.415315)"> + id="path44-3" + inkscape:connector-curvature="0" + sodipodi:nodetypes="cccccccccc" /> From 57dae38cf9ff5b2a07c908afc3f78b0c7bb67845 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kate=C5=99ina=20=C4=8C=C3=AD=C5=BEkov=C3=A1?= Date: Wed, 6 May 2020 22:45:27 +0200 Subject: [PATCH 05/14] =?UTF-8?q?formul=C3=A1=C5=99e=20vzhled=20jako=20tab?= =?UTF-8?q?ulky?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/static/seminar/prihlaska.js | 10 +- seminar/templates/seminar/edit.html | 89 ++++++---- seminar/templates/seminar/login.html | 7 +- seminar/templates/seminar/prihlaska.html | 168 +++++++++--------- .../templates/seminar/prihlaska_field.html | 27 ++- 5 files changed, 170 insertions(+), 131 deletions(-) diff --git a/seminar/static/seminar/prihlaska.js b/seminar/static/seminar/prihlaska.js index 81f91d28..c3565450 100644 --- a/seminar/static/seminar/prihlaska.js +++ b/seminar/static/seminar/prihlaska.js @@ -3,7 +3,7 @@ function addrCountryChanged(){ var stat_text = document.getElementById('id_li_stat_text'); var stat = stat_select[stat_select.selectedIndex].value; if (stat === "other"){ - stat_text.style.display="block"; + stat_text.style.display="revert"; } else { stat_text.style.display="none"; $('#id_stat_text').val(""); @@ -12,18 +12,22 @@ function addrCountryChanged(){ function hideSchoolTextfields(){ var skola_nazev = document.getElementById('id_li_skola_nazev'); var skola_adresa = document.getElementById('id_li_skola_adresa'); + var skola_vypln = document.getElementById('id_li_skola_vypln'); skola_nazev.style.display="none"; skola_adresa.style.display="none"; + skola_vypln.style.display="none"; } function schoolNotInList(){ var skola_nazev = document.getElementById('id_li_skola_nazev'); var skola_adresa = document.getElementById('id_li_skola_adresa'); + var skola_vypln = document.getElementById('id_li_skola_vypln'); // FIXME nefunguje a nevim proc (TypeError: $(...).select2 is not a function) //var skola_select = $('#id_skola').select2(); //skola_select.val(null).trigger('change'); - skola_nazev.style.display="block"; - skola_adresa.style.display="block"; + skola_vypln.style.display="revert"; + skola_nazev.style.display="revert"; + skola_adresa.style.display="revert"; } document.addEventListener("DOMContentLoaded", function(){ diff --git a/seminar/templates/seminar/edit.html b/seminar/templates/seminar/edit.html index 3f3e0d99..bc78312c 100644 --- a/seminar/templates/seminar/edit.html +++ b/seminar/templates/seminar/edit.html @@ -15,59 +15,77 @@
{% csrf_token %} {{form.non_field_errors}} -
    -
  • - Přihlašovací údaje -
  • + +
    + +

    + Přihlašovací údaje +

    + {% include "seminar/prihlaska_field.html" with field=form.username %} -
  • +
  • + +
    + +

    Osobní údaje -

  • + + {% include "seminar/prihlaska_field.html" with field=form.jmeno %} -
  • {% include "seminar/prihlaska_field.html" with field=form.prijmeni %} -
  • {% include "seminar/prihlaska_field.html" with field=form.pohlavi_muz%} -
  • {% include "seminar/prihlaska_field.html" with field=form.email %} -
  • {% include "seminar/prihlaska_field.html" with field=form.telefon %} -
  • {% include "seminar/prihlaska_field.html" with field=form.datum_narozeni %} -
  • +
  • +
    - Bydliště -
  • + +

    + Bydliště +

    + {% include "seminar/prihlaska_field.html" with field=form.ulice %} -
  • {% include "seminar/prihlaska_field.html" with field=form.mesto %} -
  • {% include "seminar/prihlaska_field.html" with field=form.psc %} -
  • {% include "seminar/prihlaska_field.html" with field=form.stat %} -
  • -
  • - {% include "seminar/prihlaska_field.html" with field=form.stat_text %} -
  • + {% include "seminar/prihlaska_field.html" with field=form.stat_text id="id_li_stat_text"%} +
  • +
    + +

    + Škola +

    + {% include "seminar/prihlaska_field.html" with field=form.skola %} -
  • - -
  • -
  • - Vyplň prosím celý název a adresu školy.
    - {% include "seminar/prihlaska_field.html" with field=form.skola_nazev %} -
  • -
  • - {% include "seminar/prihlaska_field.html" with field=form.skola_adresa %} -
  • +
  • + + {% include "seminar/prihlaska_field.html" with field=form.skola_nazev id="id_li_skola_nazev" %} + {% include "seminar/prihlaska_field.html" with field=form.skola_adresa id="id_li_skola_adresa" %} {% include "seminar/prihlaska_field.html" with field=form.rok_maturity %} -
  • +
  • Vyplň prosím celý název a adresu školy.
    + +
    + +

    + Pošta +

    + {% include "seminar/prihlaska_field.html" with field=form.zasilat %} -
  • +
  • + +
    + +

    + Zasílání propagačních materiálů +

    + {% include "seminar/prihlaska_field.html" with field=form.spam %} - - +
    + +
    +
  • {% endblock %} - diff --git a/seminar/templates/seminar/login.html b/seminar/templates/seminar/login.html index 6319ecc0..9769a41a 100644 --- a/seminar/templates/seminar/login.html +++ b/seminar/templates/seminar/login.html @@ -10,9 +10,9 @@
    {% csrf_token %} -
      - {{ form.as_ul }} -
    + + {{ form.as_table }} +
    {# Django si posílá jméno další stránky jako obsah formuláře a výchozí hodnota (mi přišlo, že) nejde změnit... #} @@ -23,4 +23,3 @@ {% endblock %} - diff --git a/seminar/templates/seminar/prihlaska.html b/seminar/templates/seminar/prihlaska.html index 8b17c0bd..baf4ec47 100644 --- a/seminar/templates/seminar/prihlaska.html +++ b/seminar/templates/seminar/prihlaska.html @@ -14,92 +14,93 @@ {% endblock %}{% endblock %} - {% csrf_token %} {{form.non_field_errors}} -
      -
    • - Přihlašovací údaje -
    • -
    • - {% include "seminar/prihlaska_field.html" with field=form.username %} -
    • -
    • - {% include "seminar/prihlaska_field.html" with field=form.password %} -
    • -
    • - {% include "seminar/prihlaska_field.html" with field=form.password_check %} -
    • -
    • - Osobní údaje -
    • -
    • - {% include "seminar/prihlaska_field.html" with field=form.jmeno %} -
    • -
    • - {% include "seminar/prihlaska_field.html" with field=form.prijmeni %} -
    • -
    • - {% include "seminar/prihlaska_field.html" with field=form.pohlavi_muz%} -
    • -
    • - {% include "seminar/prihlaska_field.html" with field=form.email %} -
    • -
    • - {% include "seminar/prihlaska_field.html" with field=form.telefon %} -
    • -
    • - {% include "seminar/prihlaska_field.html" with field=form.datum_narozeni %} -
    • -
    • -
      - Bydliště -
    • -
    • - {% include "seminar/prihlaska_field.html" with field=form.ulice %} -
    • -
    • - {% include "seminar/prihlaska_field.html" with field=form.mesto %} -
    • -
    • - {% include "seminar/prihlaska_field.html" with field=form.psc %} -
    • -
    • - {% include "seminar/prihlaska_field.html" with field=form.stat %} -
    • -
    • - {% include "seminar/prihlaska_field.html" with field=form.stat_text %} -
    • - -
    • -
      - {% include "seminar/prihlaska_field.html" with field=form.skola %} -
    • -
    • - -
    • -
    • - Vyplň prosím celý název a adresu školy.
      - {% include "seminar/prihlaska_field.html" with field=form.skola_nazev %} -
    • -
    • - {% include "seminar/prihlaska_field.html" with field=form.skola_adresa %} -
    • -
    • - {% include "seminar/prihlaska_field.html" with field=form.rok_maturity %} -
    • -
    • - {% include "seminar/prihlaska_field.html" with field=form.zasilat %} -
    • -
    • - {% include "seminar/gdpr.html" %} - {% include "seminar/prihlaska_field.html" with field=form.gdpr %} -
    • -
    • - {% include "seminar/prihlaska_field.html" with field=form.spam %} -
    • -
    + + +
    +

    + Přihlašovací údaje +

    + + {% include "seminar/prihlaska_field.html" with field=form.username %} + {% include "seminar/prihlaska_field.html" with field=form.password %} + {% include "seminar/prihlaska_field.html" with field=form.password_check %} +
    + +
    + +

    + Osobní údaje +

    + + {% include "seminar/prihlaska_field.html" with field=form.jmeno %} + {% include "seminar/prihlaska_field.html" with field=form.prijmeni %} + {% include "seminar/prihlaska_field.html" with field=form.pohlavi_muz%} + {% include "seminar/prihlaska_field.html" with field=form.email %} + {% include "seminar/prihlaska_field.html" with field=form.telefon %} + {% include "seminar/prihlaska_field.html" with field=form.datum_narozeni %} +
    + +
    + +

    + Bydliště +

    + + {% include "seminar/prihlaska_field.html" with field=form.ulice %} + {% include "seminar/prihlaska_field.html" with field=form.mesto %} + {% include "seminar/prihlaska_field.html" with field=form.psc %} + {% include "seminar/prihlaska_field.html" with field=form.stat %} + {% include "seminar/prihlaska_field.html" with field=form.stat_text id="id_li_stat_text"%} +
    + +
    + +

    + Škola +

    + + {% include "seminar/prihlaska_field.html" with field=form.skola %} + + + {% include "seminar/prihlaska_field.html" with field=form.skola_nazev id="id_li_skola_nazev" %} + {% include "seminar/prihlaska_field.html" with field=form.skola_adresa id="id_li_skola_adresa" %} + {% include "seminar/prihlaska_field.html" with field=form.rok_maturity %} +
    Vyplň prosím celý název a adresu školy.
    + +
    + +

    + Pošta +

    + + {% include "seminar/prihlaska_field.html" with field=form.zasilat %} +
    +
    + +

    + GDPR +

    + {% include "seminar/gdpr.html" %} + + {% include "seminar/prihlaska_field.html" with field=form.gdpr %} +
    + +
    + +

    + Zasílání propagačních materiálů +

    + + {% include "seminar/prihlaska_field.html" with field=form.spam %} +
    + + + +
    +