From 5543e368d28d148dd5f6e13616e22d0a0b3508d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Koci=C3=A1n?= Date: Tue, 8 Sep 2015 12:02:03 +0200 Subject: [PATCH 01/30] =?UTF-8?q?Drobn=C3=A1=20oprava=20tituln=C3=AD=20str?= =?UTF-8?q?any?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/templates/seminar/novinky.html | 8 ++------ seminar/templates/seminar/titulnistrana.html | 5 ++--- seminar/views.py | 10 ++-------- 3 files changed, 6 insertions(+), 17 deletions(-) diff --git a/seminar/templates/seminar/novinky.html b/seminar/templates/seminar/novinky.html index 88336670..ad7207f7 100644 --- a/seminar/templates/seminar/novinky.html +++ b/seminar/templates/seminar/novinky.html @@ -1,13 +1,9 @@ -{% extends 'titulnistrana.html'} - {% block body %} - {% for novinka in novinky %} - {% if novinka.datum > pred_2_mesici and novinka.zverejneno %} + {% for novinka in object_list %}

Tady bude novinka. {{ novinka.text }}

- Date: Tue, 8 Sep 2015 21:27:10 +0200 Subject: [PATCH 02/30] =?UTF-8?q?Upraveny=20v=C3=BDsledkovky?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit '–' místo ' -- ', v posledním rozsahu pořadí nechybí horní mez, v ročníku funguje součet bodů za čísla, ^MM se nezobrazuje, když řešitel nemá titul, trochu zkrácen view --- seminar/templates/seminar/archiv/cislo.html | 16 +- seminar/templates/seminar/archiv/rocnik.html | 10 +- seminar/views.py | 159 +++++++------------ 3 files changed, 76 insertions(+), 109 deletions(-) diff --git a/seminar/templates/seminar/archiv/cislo.html b/seminar/templates/seminar/archiv/cislo.html index b7b11a1c..23d115a7 100644 --- a/seminar/templates/seminar/archiv/cislo.html +++ b/seminar/templates/seminar/archiv/cislo.html @@ -34,17 +34,21 @@ {% for p in problemy %} {{ p.cislo_zadani.cislo }}.{{ p.kod }} {% endfor %} - Sum-1 - Celkem + Za číslo + Za ročník Odjakživa {% for rv in vysledkovka %} - {{ rv.poradi }} - {{ rv.titul }} MM {{ rv.resitel.plne_jmeno }} - {% for b in rv.body %} + {% autoescape off %}{{ rv.poradi }}{% endautoescape %} + + {% if rv.titul %} + {{ rv.titul }}MM + {% endif %} + {{ rv.resitel.plne_jmeno }} + {% for b in rv.body_ulohy %} {{ b }} {% endfor %} - {{ rv.body_minule }} + {{ rv.body_cislo }} {{ rv.body_celkem_rocnik }} {{ rv.body_celkem_odjakziva }} diff --git a/seminar/templates/seminar/archiv/rocnik.html b/seminar/templates/seminar/archiv/rocnik.html index 9aa8cacc..346f9c44 100644 --- a/seminar/templates/seminar/archiv/rocnik.html +++ b/seminar/templates/seminar/archiv/rocnik.html @@ -30,11 +30,15 @@ {% for rv in vysledkovka %} - {{ rv.poradi }} - {{ rv.resitel.titul }} MM {{ rv.resitel.plne_jmeno }} + {% autoescape off %}{{ rv.poradi }}{% endautoescape %} + + {% if rv.titul %} + {{ rv.titul }}MM + {% endif %} + {{ rv.resitel.plne_jmeno }} {{ rv.resitel.rocnik }} {{ rv.body_odjakziva }} - {% for b in rv.body %} + {% for b in rv.body_cisla %} {{ b }} {% endfor %} {{ rv.body_rocnik }} diff --git a/seminar/views.py b/seminar/views.py index 33fd1f89..03f77180 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -12,6 +12,7 @@ from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjak from . import utils import datetime +from itertools import groupby def AktualniZadaniView(request): @@ -72,6 +73,26 @@ class CislaView(generic.ListView): model = Rocnik template_name='seminar/archiv/cisla.html' + +def sloupec_s_poradim(vysledky): + # počet řešitelů ve výsledkovce nad aktuálním + lepsich_resitelu = 0 + + poradi_l = [] + # projdeme skupiny řešitelů se stejným počtem bodů + for skupina in (list(x) for _, x in groupby(vysledky, lambda x: x.body)): + + # připravíme si obsahy buněk ve sloupci pořadí pro skupinu + if len(skupina) == 1: + poradi_l += ["{}.".format(lepsich_resitelu + 1)] + # je-li účastníků se stejným počtem bodů víc, pořadí (rozsah X.-Y.) je jen u prvního + else: + poradi_l += ["{}.–{}.".format(lepsich_resitelu + 1, lepsich_resitelu + len(skupina))] + [""] * (len(skupina)-1) + lepsich_resitelu += len(skupina) + + return poradi_l + + class RocnikView(generic.DetailView): model = Rocnik template_name = 'seminar/archiv/rocnik.html' @@ -93,71 +114,40 @@ class RocnikView(generic.DetailView): def get_context_data(self, **kwargs): context = super(RocnikView, self).get_context_data(**kwargs) - cisla_v_rocniku = VysledkyKCisluZaRocnik.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).order_by('-cislo') + cisla_v_rocniku = VysledkyKCisluZaRocnik.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).order_by('cislo') #vyberu vsechny verejne vysledky z rocniku #pokud žádné nejsou, výsledkovka se nezobrazí if cisla_v_rocniku: - vysledky = cisla_v_rocniku.filter(cislo = cisla_v_rocniku[0].cislo).order_by('-body', 'resitel__prijmeni', 'resitel__jmeno').select_related('resitel') + vysledky = list(cisla_v_rocniku.filter(cislo = cisla_v_rocniku[0].cislo).order_by('-body', 'resitel__prijmeni', 'resitel__jmeno').select_related('resitel')) #vybere vsechny vysledky z posledniho verejneho cisla a setridi sestupne dle bodu - vysledky_resitele = {} - stejne_body = {} - konec_rozmezi = {} vysledkovka = [] - posledni_body = 100000 - predchozi_poradi = None - body_minule = None - - for vi in range(len(vysledky)): - v = vysledky[vi] - rv = RadekVysledkovky() - rv.resitel = v.resitel + + # doplníme některé údaje do řádků výsledkovky pro řešitele ve skupině + for poradi, v in zip(sloupec_s_poradim(vysledky), vysledky): + v.poradi = poradi + v.resitel.rocnik = v.resitel.rocnik(context['rocnik']) + verejne_vysl_odjakziva = VysledkyKCisluOdjakziva.objects.filter(cislo__verejna_vysledkovka = True).filter(cislo__rocnik = context['rocnik']).filter(cislo = cisla_v_rocniku[0].cislo) - rv.body_odjakziva = verejne_vysl_odjakziva.filter(resitel = rv.resitel)[0].body - rv.resitel.titul = rv.resitel.get_titul(rv.body_odjakziva) - rv.resitel.rocnik = rv.resitel.rocnik(context['rocnik']) - rv.body = []*len(context['rocnik'].verejna_cisla()) + + v.body_odjakziva = verejne_vysl_odjakziva.filter(resitel = v.resitel)[0].body + v.titul = v.resitel.get_titul(v.body_odjakziva) + v.body_rocnik = v.body + v.body_cisla = [] + #pokud pro dany rok a cislo nema resitel vysledky, ma defaultne 0 for cis in context['rocnik'].verejna_cisla(): if cis.verejna_vysledkovka: - print cis - body_za_cislo = VysledkyZaCislo.objects.filter(cislo__rocnik = context['rocnik']).filter(cislo = cis).filter(resitel = rv.resitel) + body_za_cislo = VysledkyZaCislo.objects.filter(cislo__rocnik = context['rocnik']).filter(cislo = cis).filter(resitel = v.resitel) #seznam vysledku se spravnym rocnikem a cislem pro resitele #zobrazim jen je-li vysledkovka verejna if body_za_cislo: - rv.body.append(body_za_cislo[0].body) + v.body_cisla.append(body_za_cislo[0].body) #neprazdne vysledky by mely obsahovat prave jeden vysledek else: - rv.body.append(0) + v.body_cisla.append(0) #resitel nema za cislo body - rv.poradi = '' - #defaultni poradi je prazdne - kvuli sdilenym mistum - rv.body_rocnik = v.body - rv.body_na_zacatku = rv.body_odjakziva - rv.body_rocnik - #body za minule rocniky - if posledni_body > v.body: - if stejne_body.get(posledni_body): - #pokud uz jsme predtim narazili na stejny pocet bodu - konec_rozmezi[posledni_body] = int(predchozi_poradi.poradi) + stejne_body[posledni_body] - #druha hranice sdilenych pozic - zacatek + pocet lidi se stejnymi body - predchozi_poradi.poradi = '{0}. -- {1}.'.format(predchozi_poradi.poradi,konec_rozmezi[posledni_body]) - #predchozi radek ktery menil pocty bodu bude mit rozsah, pokud bylo vice radku se stejnym poctem bodu - elif predchozi_poradi : - predchozi_poradi.poradi = '{0}.'.format(predchozi_poradi.poradi) - #pokud nebyl rozsah hodnot, vypisu, pridam tecku za cislo - posledni_body = v.body - rv.poradi = vi + 1 - #poradi se meni jen u resitele s rozdilnym poctem bodu nez mel minuly - predchozi_poradi = rv - elif posledni_body == v.body: - if not stejne_body.get(v.body): - stejne_body[v.body] = 1 - #pokud klic neexistuje, zalozim novy pro tohoto resitele - else: - stejne_body[v.body] += 1 - #rozsirim pocet resitelu sdilejici stejnou pozici - vysledky_resitele[v.resitel.id] = rv - #odkaz na radek vysledkovky patrici danemu resiteli - vysledkovka.append(rv) + + vysledkovka.append(v) context['vysledkovka'] = vysledkovka return context @@ -188,6 +178,7 @@ class CisloView(generic.DetailView): {'verbose_name': queryset.model._meta.verbose_name}) return obj + def get_context_data(self, **kwargs): context = super(CisloView, self).get_context_data(**kwargs) @@ -208,60 +199,28 @@ class CisloView(generic.DetailView): #umoznuje zjistit index podle id problemu vysledky_resitele = {} - stejne_body = {} - konec_rozmezi = {} vysledkovka = [] - posledni_body = 100000 - predchozi_poradi = None - body_minule = None - - for vi in range(len(vysledky)): - v = vysledky[vi] - tv = RadekVysledkovky() - tv.resitel = v.resitel - tv.resitel.titul = tv.resitel.get_titul(v.body) - tv.rocnik = tv.resitel.rocnik(context['cislo'].rocnik) - tv.vysledek = v - #odkazuje na VysledkyKCislu - tv.body = ['']*len(problemy) - #pole bodu za ulohy - tv.poradi = '' - #defaultni poradi je prazdne - kvuli sdilenym mistum - tv.body_celkem_rocnik = v.body - tv.body_celkem_odjakziva = VysledkyKCisluOdjakziva.objects.get(resitel=v.resitel, cislo=context['cislo']).body + + # doplníme některé údaje do řádků výsledkovky pro řešitele ve skupině + for poradi, v in zip(sloupec_s_poradim(vysledky), vysledky): + v.poradi = poradi + v.body_celkem_rocnik = v.body + v.body_celkem_odjakziva = VysledkyKCisluOdjakziva.objects.get(resitel=v.resitel, cislo=context['cislo']).body + v.body_ulohy = [0] * len(problemy) + v.titul = v.resitel.get_titul(v.body_celkem_odjakziva) + body_cislo_q = VysledkyZaCislo.objects.filter(resitel=v.resitel, cislo=context['cislo']) - tv.body_cislo = body_cislo_q[0].body if len(body_cislo_q) > 0 else 0 - tv.body_minule = tv.body_celkem_rocnik - tv.body_cislo - tv.titul=tv.resitel.get_titul(int(tv.body_celkem_odjakziva)) - #pocet bodu do tohoto cisla - if posledni_body > tv.body_celkem_rocnik: - if stejne_body.get(posledni_body): - konec_rozmezi[posledni_body] = int(predchozi_poradi.poradi) + stejne_body[posledni_body] - #druha hranice sdilenych pozic - zacatek + pocet lidi se stejnymi body - predchozi_poradi.poradi = '{0}. -- {1}.'.format(predchozi_poradi.poradi,konec_rozmezi[posledni_body]) - #predchozi radek ktery menil pocty bodu bude mit rozsah, pokud bylo vice radku se stejnym poctem bodu - elif predchozi_poradi : - predchozi_poradi.poradi = '{0}.'.format(predchozi_poradi.poradi) - #pokud nebyl rozsah hodnot, pridam tecku za cislo - posledni_body = tv.body_celkem_rocnik - tv.poradi = vi + 1 - #poradi se meni jen u resitele s rozdilnym poctem bodu nez mel minuly - predchozi_poradi = tv - elif posledni_body == tv.body_celkem_rocnik: - if not stejne_body.get(tv.body_celkem_rocnik): - stejne_body[tv.body_celkem_rocnik] = 1 - #pokud klic neexistuje, zalozim novy pro tohoto resitele - else: - stejne_body[tv.body_celkem_rocnik] += 1 - #rozsirim pocet resitelu sdilejici stejnou pozici - vysledky_resitele[v.resitel.id] = tv - #odkaz na radek vysledkovky patrici danemu resiteli - vysledkovka.append(tv) + v.body_cislo = body_cislo_q[0].body if body_cislo_q else 0 - for r in reseni: - vysledky_resitele[r.resitel.id].body[problem_index[r.problem.id]] = r.body - + vysledkovka.append(v) + # připravíme si odkaz na řádek, abychom do něj mohli doplnit body za jednotlivé úlohy + vysledky_resitele[v.resitel.id] = v + + # za každé řešení doplníme k příslušnému řešiteli a úloze body + for r in reseni: + vysledky_resitele[r.resitel.id].body_ulohy[problem_index[r.problem.id]] = r.body + context['vysledkovka'] = vysledkovka context['problemy'] = problemy context['v_cisle_zadane'] = v_cisle_zadane From 7f7f0d06d88415785dc17a29b7aa393e34611a9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Koci=C3=A1n?= Date: Wed, 9 Sep 2015 18:41:37 +0200 Subject: [PATCH 03/30] =?UTF-8?q?Drobn=C3=A9=20zm=C4=9Bny=20za=C4=8Dlen?= =?UTF-8?q?=C4=9Bn=C3=AD=20t=C3=A9mat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit zobrazení typu místo 'Problém' u problému, přidány odkazy na témata u ročníku, výpis témat v aktuálním zadání nahrazen odkazem, Tondův text z flatpages u témat --- seminar/models.py | 3 +++ seminar/templates/seminar/archiv/problem.html | 2 +- seminar/templates/seminar/archiv/rocnik.html | 9 +++++++++ .../seminar/zadani/AktualniZadani.html | 7 +------ seminar/templates/seminar/zadani/Temata.html | 20 +++++++++---------- seminar/views.py | 3 +++ 6 files changed, 27 insertions(+), 17 deletions(-) diff --git a/seminar/models.py b/seminar/models.py index 59d3f4a7..b3ab2453 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -453,6 +453,9 @@ class Problem(SeminarModelBase): return force_unicode(u"t%s" % (self.kod,)) return '' + def nazev_typu(self): + return dict(self.TYP_CHOICES)[self.typ] + def verejne(self): return (self.cislo_zadani and self.cislo_zadani.verejne()) verejne.boolean = True diff --git a/seminar/templates/seminar/archiv/problem.html b/seminar/templates/seminar/archiv/problem.html index 5742a180..921a5689 100644 --- a/seminar/templates/seminar/archiv/problem.html +++ b/seminar/templates/seminar/archiv/problem.html @@ -5,7 +5,7 @@ {% block content %}
{% if problem.cislo_zadani %} -

{% block nadpis1 %}Problém {{ problem.kod_v_rocniku }}: {{ problem.nazev }}{% endblock %}

+

{% block nadpis1 %}{{ problem.nazev_typu }} {{ problem.kod_v_rocniku }}: {{ problem.nazev }}{% endblock %}

Zadáno v čísle {{ problem.cislo_zadani.kod }}. {% if problem.cislo_reseni %} diff --git a/seminar/templates/seminar/archiv/rocnik.html b/seminar/templates/seminar/archiv/rocnik.html index 346f9c44..558d9bfa 100644 --- a/seminar/templates/seminar/archiv/rocnik.html +++ b/seminar/templates/seminar/archiv/rocnik.html @@ -12,6 +12,15 @@ {% endfor %} + {% if temata_v_rocniku %} +

Témata

+ + {% endif %} + {% if vysledkovka %}

Výsledkovka

diff --git a/seminar/templates/seminar/zadani/AktualniZadani.html b/seminar/templates/seminar/zadani/AktualniZadani.html index ae2dfd60..552dcf5d 100644 --- a/seminar/templates/seminar/zadani/AktualniZadani.html +++ b/seminar/templates/seminar/zadani/AktualniZadani.html @@ -28,12 +28,7 @@ Aktuálně nejsou zadané žádné úlohy k řešení. {% endfor %} -

Témata

- {% for tema in temata %} -

Téma {{tema.kod}}: {{tema.nazev}}

- Stránka tématu - {% autoescape off %}{{tema.text_zadani}}{% endautoescape %} - {% endfor %} +

Témata

{% endwith %} diff --git a/seminar/templates/seminar/zadani/Temata.html b/seminar/templates/seminar/zadani/Temata.html index 14a59d5e..4253c066 100644 --- a/seminar/templates/seminar/zadani/Temata.html +++ b/seminar/templates/seminar/zadani/Temata.html @@ -5,22 +5,22 @@

{% block nadpis1 %}Témata{% endblock %}

- Témata obvykle představují složitější problémy, než samostatné úlohy. Navíc - v jejich zadání je vždy prostor pro tvůrčí rozšíření. Nad nápady - k tématům můžeš přemýšlet celý rok až do termínu odeslání šestého - čísla. Pokud tě něco napadne, napiš nám o tom článek. My došlé články - revidujeme, hodnotíme a ty nejzajímavější uveřejňujeme zde na webu, - případně i v někerém z čísel časopisu. Můžeš také reagovat na - články ostatních řešitelů. Za pěkný článek k tématu lze získat třeba i - 20 bodů, určitě se tedy vyplatí jimi zabývat. Pokud nevíš, jak takový - článek napsat, podívej se na náš návod.{# TODO odkaz #} + Témata jsou hlavním obsahem časopisu M&M. Obvykle představují + složitější a obecnější problémy než samostatné úlohy. Navíc je v jejich + zadání vždy prostor pro tvůrčí rozšíření. Za pěkný článek k tématu lze + získat třeba i 20 bodů, určitě se tedy vyplatí se tématy zabývat.

+

+ Jak řešit téma? +

+ {% if temata %}

Letos jsme pro tebe připravili tato témata:

+ {% endif %} {% for problem in temata %} {# TODO použít {{problem.kod_v_rocniku}} ? vrací t4 místo 4 #} -

Téma {{problem.kod}}: {{problem.nazev}}

+

Téma {{problem.kod}}: {{problem.nazev}}

{% autoescape off %}{{problem.text_zadani}}{% endautoescape %}
{% empty %} diff --git a/seminar/views.py b/seminar/views.py index 03f77180..f710ee33 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -149,7 +149,10 @@ class RocnikView(generic.DetailView): vysledkovka.append(v) + temata_v_rocniku = Problem.objects.filter(typ=Problem.TYP_TEMA, cislo_zadani__rocnik=context['rocnik']) + context['vysledkovka'] = vysledkovka + context['temata_v_rocniku'] = temata_v_rocniku return context class ProblemView(generic.DetailView): From 2cef4768721980922898574249afff72bdecbbcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Koci=C3=A1n?= Date: Wed, 9 Sep 2015 21:51:25 +0200 Subject: [PATCH 04/30] =?UTF-8?q?Vyslou=C5=BEil=C3=BD=20org=20se=20pozn?= =?UTF-8?q?=C3=A1=20tak,=20=C5=BEe=20u=C5=BE=20doorgoval?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- seminar/models.py | 2 +- .../templates/seminar/cojemam/organizatori.html | 14 +++++++------- seminar/views.py | 10 +++++----- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/seminar/models.py b/seminar/models.py index b3ab2453..f8d560ff 100644 --- a/seminar/models.py +++ b/seminar/models.py @@ -759,7 +759,7 @@ class Organizator(models.Model): null = True, blank = True) foto = models.ImageField('Fotografie organizátora', upload_to='image_organizatori/velke/%Y/', null = True, blank = True, - help_text = 'Vlož fotografii organizátora o libovoné velikosti') + help_text = 'Vlož fotografii organizátora o libovolné velikosti') foto_male = models.ImageField(upload_to='image_organizatori/male/%Y/', null = True, blank = True, editable = False) diff --git a/seminar/templates/seminar/cojemam/organizatori.html b/seminar/templates/seminar/cojemam/organizatori.html index 2d2ab12f..827ac7cf 100644 --- a/seminar/templates/seminar/cojemam/organizatori.html +++ b/seminar/templates/seminar/cojemam/organizatori.html @@ -31,13 +31,13 @@
{% endif %}
# Jméno {% for p in problemy %} - {{ p.cislo_zadani.cislo }}.{{ p.kod }} + {{ p.kod_v_rocniku }} {% endfor %} Za číslo Za ročník diff --git a/seminar/views.py b/seminar/views.py index 8ca58936..e8f5917b 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -194,7 +194,7 @@ class CisloView(generic.DetailView): resene_problemy = Problem.objects.filter(cislo_reseni=context['cislo']).filter(typ__in=typy_skutecne_zadanych).order_by('cislo_reseni__cislo', 'kod') - problemy = sorted(list(set([r.problem for r in reseni])), key=lambda x:(0 if x.typ==Problem.TYP_ULOHA else 1,x.kod)) + problemy = sorted(list(set([r.problem for r in reseni])), key=lambda x:(0 if x.typ==Problem.TYP_ULOHA else 1, x.kod_v_rocniku)) #setridi problemy podle typu a poradi zadani problem_index = {} for i in range(len(problemy)): From 01f41bc71d8748f3ee790be2b91bb5474d11c979 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Koci=C3=A1n?= Date: Sat, 12 Sep 2015 00:22:17 +0200 Subject: [PATCH 29/30] =?UTF-8?q?=C3=9Apravy=20novinek?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * předvyplnění přihlášeného uživatele * zobrazení pěti nejnovějších na titulní straně bez ohledu na stáří * archiv --- seminar/admin.py | 9 ++++++ seminar/templates/seminar/novinky.html | 31 +++++++++++++++++++ seminar/templates/seminar/stare_novinky.html | 11 +++++++ seminar/templates/seminar/titulnistrana.html | 32 ++------------------ seminar/urls.py | 1 + seminar/views.py | 8 +++-- 6 files changed, 61 insertions(+), 31 deletions(-) create mode 100644 seminar/templates/seminar/novinky.html create mode 100644 seminar/templates/seminar/stare_novinky.html diff --git a/seminar/admin.py b/seminar/admin.py index 3a9fa74f..eeb415ac 100644 --- a/seminar/admin.py +++ b/seminar/admin.py @@ -380,6 +380,15 @@ class NovinkyAdmin(admin.ModelAdmin): list_display = ['datum', 'autor', 'text', 'zverejneno', 'obrazek'] actions = [zverejnit_novinky, zneverejnit_novinky] + # předvyplnění přihlášeného uživatele jako autora novinky + def formfield_for_foreignkey(self, db_field, request, **kwargs): + if db_field.name == 'autor': + kwargs['initial'] = request.user.id + return super(NovinkyAdmin, self).formfield_for_foreignkey( + db_field, request, **kwargs + ) + + admin.site.register(Novinky, NovinkyAdmin) ### Organizator diff --git a/seminar/templates/seminar/novinky.html b/seminar/templates/seminar/novinky.html new file mode 100644 index 00000000..10bf0007 --- /dev/null +++ b/seminar/templates/seminar/novinky.html @@ -0,0 +1,31 @@ +{% for novinka in object_list %} +{# pripravene div-y na stylovani#} +
+ {# datum #} +
{{novinka.datum}}
+ {# text #} + {{ novinka.text | safe }} + {# obrazek #} + {% if novinka.obrazek %} +
+ +
+ {% endif %} + {# autor #} + {% if user.is_staff %} +
{{novinka.autor.first_name}} + {% if novinka.autor.organizator.prezdivka%} + „{{novinka.autor.organizator.prezdivka}}“ + {% endif %} + {{novinka.autor.last_name}} +
+ {% endif %} +
+{% endfor%} diff --git a/seminar/templates/seminar/stare_novinky.html b/seminar/templates/seminar/stare_novinky.html new file mode 100644 index 00000000..97012e25 --- /dev/null +++ b/seminar/templates/seminar/stare_novinky.html @@ -0,0 +1,11 @@ +{% extends 'base.html' %} + +{% block content %} + +

+ Archiv novinek +

+ + {% include 'seminar/novinky.html' %} + +{% endblock %} diff --git a/seminar/templates/seminar/titulnistrana.html b/seminar/templates/seminar/titulnistrana.html index 89a0f566..584668db 100644 --- a/seminar/templates/seminar/titulnistrana.html +++ b/seminar/templates/seminar/titulnistrana.html @@ -13,34 +13,8 @@ {# Novinky #}

Novinky

+ {% include 'seminar/novinky.html' %} + + Archiv novinek - {% for novinka in object_list %} - {# pripravene div-y na stylovani#} -
- {# datum #} -
{{novinka.datum}}
- {# text #} - {% autoescape off %}{{novinka.text}}{% endautoescape %} - {# obrazek #} - {% if novinka.obrazek %} -
- -
- {% endif %} - {# autor #} -
{{novinka.autor.first_name}} - {% if novinka.autor.organizator.prezdivka%} - „{{novinka.autor.organizator.prezdivka}}“ - {% endif %} - {{novinka.autor.last_name}} -
-
- {% endfor%} {% endblock %} diff --git a/seminar/urls.py b/seminar/urls.py index 476cf3f1..ff322241 100644 --- a/seminar/urls.py +++ b/seminar/urls.py @@ -20,6 +20,7 @@ urlpatterns = patterns('', url(r'^zadani/aktualni/$', views.AktualniZadaniView, name='seminar_aktualni_zadani'), url(r'^zadani/temata/$', views.ZadaniTemataView, name='seminar_temata'), url(r'^$', views.TitulniStranaView.as_view(), name='titulni_strana'), + url(r'^stare-novinky/$', views.StareNovinkyView.as_view(), name='stare_novinky'), url(r'^stav$', views.StavDatabazeView, name='stav_databaze'), diff --git a/seminar/views.py b/seminar/views.py index e8f5917b..4eaf8f19 100644 --- a/seminar/views.py +++ b/seminar/views.py @@ -42,13 +42,17 @@ def ZadaniTemataView(request): class TitulniStranaView(generic.ListView): model = Novinky template_name='seminar/titulnistrana.html' - pred_dvema_mesici = (date.today() - timedelta(2*365/12)) - queryset = Novinky.objects.filter(datum__range=(pred_dvema_mesici, date.today())).filter(zverejneno=True).order_by('-datum') + queryset = Novinky.objects.filter(zverejneno=True).order_by('-datum')[:5] #def get_context_data(self, **kwargs): # context = super(TitulniStranaView, self).get_context_data(**kwargs) # return context +class StareNovinkyView(generic.ListView): + model = Novinky + template_name = 'seminar/stare_novinky.html' + queryset = Novinky.objects.filter(zverejneno=True).order_by('-datum') + ### Co je M&M ## Organizatori From 993a9df4a8942d357126fa3d454425b313a41e42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20Koci=C3=A1n?= Date: Sat, 12 Sep 2015 11:14:21 +0200 Subject: [PATCH 30/30] =?UTF-8?q?Odkaz=20na=20tituln=C3=AD=20stranu=20z=20?= =?UTF-8?q?hlavi=C4=8Dky?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mamweb/templates/base.html | 15 ++++++++------- seminar/templates/seminar/stare_novinky.html | 2 ++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/mamweb/templates/base.html b/mamweb/templates/base.html index e930820c..05063dbc 100644 --- a/mamweb/templates/base.html +++ b/mamweb/templates/base.html @@ -30,9 +30,8 @@ - - {# TODO predelat pro pouze pro orgy (misto pro prihlasene) #} - {% if user.is_authenticated %} + + {% if user.is_staff %}