Browse Source

Merge branch 'test_deadline' into data_migrations

export_seznamu_prednasek
Pavel "LEdoian" Turinsky 4 years ago
parent
commit
6a1109ba4d
  1. 2
      data/flat.json
  2. 661
      data/sitetree_new.json
  3. 251
      mamweb/static/css/mamweb.css
  4. 26847
      mamweb/static/images/jakresit_1.svg
  5. 26847
      mamweb/static/images/jakresit_2.svg
  6. 26847
      mamweb/static/images/jakresit_3.svg
  7. 13
      mamweb/templates/base.html
  8. 1
      seminar/models.py
  9. 6
      seminar/templates/seminar/archiv/cisla.html
  10. 16
      seminar/templates/seminar/jak-resit.html
  11. 12
      seminar/templates/seminar/novinky.html
  12. 75
      seminar/templates/seminar/titulnistrana.html
  13. 3
      seminar/urls.py
  14. 93
      seminar/views/views_all.py

2
data/flat.json

@ -260,7 +260,7 @@
"fields": {
"url": "/co-je-MaM/kontakt/",
"title": "Kontakt",
"content": "<p>Sv\u00e1 \u0159e\u0161en\u00ed \u010di p\u0159\u00edpadn\u00e9 dotazy n\u00e1m m\u016f\u017eete&nbsp;pos\u00edlat bu\u010f klasickou, nebo elektronickou po\u0161tou:</p>\r\n\r\n<table align=\"left\" border=\"0\" cellpadding=\"1\" cellspacing=\"1\" style=\"width:100%\">\r\n\t<tbody>\r\n\t\t<tr>\r\n\t\t\t<td>\r\n\t\t\t<p><strong>Adresa redakce</strong>:</p>\r\n\r\n\t\t\t<p>M&amp;M, OPMK MFF UK<br />\r\n\t\t\tKe Karlovu 3<br />\r\n\t\t\t121&nbsp;16 Praha&nbsp;2</p>\r\n\t\t\t</td>\r\n\t\t\t<td>\r\n\t\t\t<p><strong>E-mail</strong>:&nbsp;<a href=\"mailto:mam@matfyz.cz\" style=\"color: rgb(133, 49, 1); line-height: 20.8px;\">mam@matfyz.cz</a></p>\r\n\r\n\t\t\t<p><strong>Facebook:</strong>&nbsp;<a href=\"https://www.facebook.com/casopis.MaM?fref=ts\">Koresponden\u010dn\u00ed semin\u00e1\u0159 M&amp;M</a></p>\r\n\r\n\t\t\t<p><strong>Google Kalend\u00e1\u0159:</strong>&nbsp;<a href=\"https://calendar.google.com/calendar/embed?src=casopis.mam%40gmail.com&amp;ctz=Europe%2FPrague\">casopis.mam@gmail.com</a></p>\r\n\t\t\t</td>\r\n\t\t</tr>\r\n\t</tbody>\r\n</table>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<p>B\u011bhem \u0161koln\u00edho roku je velk\u00e1 \u010d\u00e1st <a href=\"/co-je-MaM/organizatori/\"><strong>organiz\u00e1tor\u016f</strong></a> k zasti\u017een\u00ed na koleji 17. listopadu \u010di jinde po Praze.</p>\r\n\r\n<p><strong>Adresa koleje:</strong></p>\r\n\r\n<p>P\u00e1tkova 3<br />\r\n182 00, Praha 8</p>",
"content": "<p>Sv\u00e1 \u0159e\u0161en\u00ed \u010di p\u0159\u00edpadn\u00e9 dotazy n\u00e1m m\u016f\u017eete&nbsp;pos\u00edlat bu\u010f klasickou, nebo elektronickou po\u0161tou:</p>\r\n\r\n<p><strong>Adresa redakce</strong>:</p>\r\n\r\n<p>M&amp;M, OPMK MFF UK<br />\r\nKe Karlovu 3<br />\r\n121&nbsp;16 Praha&nbsp;2</p>\r\n\r\n<p><strong>E-mail</strong>:<a href=\"mailto:mam@matfyz.cz\" style=\"color: rgb(133, 49, 1); line-height: 20.8px;\"> mam@matfyz.cz</a></p>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<p><strong>Facebook:</strong>&nbsp;<a href=\"https://www.facebook.com/casopis.MaM?fref=ts\">Koresponden\u010dn\u00ed semin\u00e1\u0159 M&amp;M</a></p>\r\n\r\n<p><strong>Google Kalend\u00e1\u0159:</strong>&nbsp;<a href=\"https://calendar.google.com/calendar/embed?src=casopis.mam%40gmail.com&amp;ctz=Europe%2FPrague\">casopis.mam@gmail.com</a></p>\r\n\r\n<p>&nbsp;</p>\r\n\r\n<p>B\u011bhem \u0161koln\u00edho roku je velk\u00e1 \u010d\u00e1st <a href=\"/co-je-MaM/organizatori/\"><strong>organiz\u00e1tor\u016f</strong></a> k zasti\u017een\u00ed na koleji 17. listopadu \u010di jinde po Praze.</p>\r\n\r\n<p><strong>Adresa koleje:</strong></p>\r\n\r\n<p>P\u00e1tkova 3<br />\r\n182 00, Praha 8</p>",
"enable_comments": false,
"template_name": "",
"registration_required": false,

661
data/sitetree_new.json

File diff suppressed because one or more lines are too long

251
mamweb/static/css/mamweb.css

@ -101,6 +101,26 @@ h6 {
color: black;
}
.button {
margin: 10px 0px 10px 0px;
padding: 4px 0; /*vertikální centování textu*/
text-align: center;
background-color: #e84e10;
color: #fffbf6;
font-size: 150%;
font-weight: bold;
font-variant: small-caps;
filter: drop-shadow(0px 5px 5px rgba(0, 0, 0, 0.4));
}
.button:hover {
position: relative;
top: 2px;
left:2px;
background-color: #df490e;
;
}
.org-logged-in .mam-text-plugin {
border: dashed 1px #6a0043;
@ -286,7 +306,11 @@ ul.submenu li>a:hover {
color: black;
}
ul.menu li.active>a, ul.submenu li.active>a {
ul.menu li.active>a {
color: #f9d59e;
}
ul.submenu li.active>a {
color: black;
}
@ -374,6 +398,75 @@ input {
margin: 5px;
}
/* titulni stranka */
.titulnistrana {
display: flex;
text-align: justify;
}
.titulnistrana h1 {
text-align: center;
}
.zjistit_vic{
text-align: center;
margin-bottom: 30px;
}
.zjistit_vic hr {
display: none;
}
.graf-svg {
display: flex;
}
#svg-graf {
width: 100%;
height: auto;
margin: 30px;
}
.titulnistrana_obsah {
width: 66%;
}
.vitej_titulka, .temata_titulka {
width: 49%;
padding: 10px;
display: table-cell;
}
.titulnistrana_novinky {
width: 33%;
padding: 10px;
}
.novinka_obrazek {
margin: 10px 0px 10px 0px;
width: 100%;
}
.novinka_datum {
font-weight: bold;
}
.novinka_autor {
text-align: right;
font-style: italic;
}
div.org-text {
font-style: italic;
}
div.odpocet {
margin: 20px;
text-align: center;
}
/**********************
* Zmenšování displeje
***********************/
@ -403,25 +496,6 @@ input {
width: 100%;
}
div.novinky{
max-width: 100%;
margin-left: auto;
margin-right: auto;
float: none;
}
div.graf{
width: 70%;
float: none;
margin-left: auto;
margin-right: auto;
margin-top: 10px;
}
#svg-graf{
width: 100%;
height: auto;;
}
ul.menu {
font-size: 90%;
margin-top: -7px;
@ -439,7 +513,6 @@ ul.submenu {
margin-top: 8px; /* mezera mezi hlavním menu a submenu */
}
}
/* stránka přes celý menší displej, větší mobil, tablet */
@ -470,11 +543,53 @@ ul.submenu {
display: inline-grid;
max-width: 300px;
}
/* titulni stranka */
.titulnistrana {
display: block;
}
.graf {
padding-top: 40px;
}
.titulnistrana_obsah {
width: 100%;
}
.vitej_titulka, .temata_titulka {
width: 49%;
padding: 10px;
display: table-cell;
}
.titulnistrana_novinky {
width: 100%;
max-width: 500px;
padding: 10px;
margin: auto;
}
#svg-graf {
width: 100%;
max-width: 500px;
padding: 10px;
margin: auto;
}
.zjistit_vic hr {
display: flex;
}
}
/* malý tablet, mobil */
@media (max-width: 650px) {
.no-mobile{
display: none;
}
#hide-if-small.login-bar-flatpage {
display: none;
}
@ -611,17 +726,33 @@ ul.submenu {
text-align: justify;
}
div.novinky {
max-width: 100%;
float: none;
table.form td, table.form tr {
display: inherit;
}
div.graf {
/* titulni stranka */
.titulnistrana {
display: block;
}
.graf {
padding-top: 40px;
}
.titulnistrana_obsah {
width: 100%;
}
table.form td, table.form tr {
display: inherit;
.vitej_titulka, .temata_titulka {
width: 100%;
padding: 10px;
display: block;
}
.titulnistrana_novinky {
width: 100%;
padding: 10px;
}
}
@ -704,11 +835,6 @@ div.org_email {
backface-visibility: hidden;
}
/* Style the front side (fallback if image is missing) */
.flip-card-front {
background-color: #bbb;
}
div.flip-card-foto img {
width: 100%;
height: 100%;
@ -724,6 +850,10 @@ div.flip-card-foto img {
padding-top: 20px;
}
#archiv.flip-card-back {
background-color: white;
}
/* karty archiv */
div.popis_rocniku {
@ -920,46 +1050,8 @@ div.cislo_odkazy ul {
}
/* titulni stranka */
.zjistit_vic{
text-align: center;
}
.graf{
float: left;
}
.novinky{
float: right;
max-width: 42%;
}
.novinka_obrazek img {
margin-bottom: 15px;
}
div.novinka_obrazek {
width: 100%;
max-width: 400px; /*FIXME*/
}
div.org-text {
font-style: italic;
}
/**/
div.nahledy_cisel {
float: right;
height: 297px;
width: 420px;
position: relative;
margin-right: 10%;
margin-bottom: 50px;
}
div.nahledy_cisel div, div.nahledy_cisel img {
position: absolute;
}
ul.form {
list-style-type: none;
padding-left: 0px;
@ -984,3 +1076,20 @@ p.gdpr {
div.gdpr {
font-size: 6pt;
}
/* Jak řešit */
.jakresit img {
width: 33%;
padding: 10px;
filter: none;
}
@media(max-width: 860px) {
.jakresit img {
margin: auto;
display: grid;
width: 100%;
max-width: 360px;
}
}

26847
mamweb/static/images/jakresit_1.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 1.8 MiB

26847
mamweb/static/images/jakresit_2.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 1.8 MiB

26847
mamweb/static/images/jakresit_3.svg

File diff suppressed because it is too large

After

Width:  |  Height:  |  Size: 1.8 MiB

13
mamweb/templates/base.html

@ -56,14 +56,17 @@
<div class='col-md-12'>
<a href='/'>
<div id="title" >M&M - korespondenční seminář a časopis MFF&nbspUK</div>
<div id="header" style="background-image: url('{{ fotka }}')">
<div id="header">
<div class="no-mobile" style="background-image: url('{{ fotka }}')">
{# TODO style=… není fancy řešení, ale u <img> se bojím, že mi to rozbije vzhled #}
{% sitetree_menu from "main_menu" include "trunk" template "logo.html" %}
</div>
<img class="logo-mobile" src="{% static 'images/logo-mobile.svg' %}" />
</div>
</a>
</div>
</div>
<div class='row'>
<div class='col-md-12'>
@ -73,6 +76,9 @@
{# ========= MENU MOBILE ========== #}
</div>
</div>
<!--Navbar-->
<nav class="nav-button">
@ -95,13 +101,15 @@
{# ========= END MENU ========== #}
<div class='row'>
<div class='row content'>
<div class='col-md-12'>
{% block content %}
{% endblock content %}
</div>
</div>
</div>
<div class='row'>
<div class='col-md-12'>
<div id="footer">
@ -110,6 +118,7 @@
<p class="license-mobile">Korespondenční seminář M&M organizují převážně studenti <a href="https://www.mff.cuni.cz/">MFF UK</a>. Organizaci semináře a vydávání časopisu podporuje <a href="https://jcmf.cz/">Jednota českých matematiků a fyziků</a>. S obsahem webu M&amp;M je možné nakládat dle licence <a href="https://creativecommons.org/licenses/by/3.0/cz/">Creative Commons Attribution 3.0</a>.</p>
</div>
</div>
</div>
<script src="{% static 'js/bootstrap.js' %}"></script>

1
seminar/models.py

@ -706,6 +706,7 @@ class Problem(SeminarModelBase,PolymorphicModel):
(STAV_SMAZANY, 'Smazaný'),
]
stav = models.CharField('stav problému', max_length=32, choices=STAV_CHOICES, blank=False, default=STAV_NAVRH)
# Téma je taky Problém, takže má stavy, "zadané" témátko je aktuálně otevřené a dá se k němu něco poslat (řešení nebo článek)
zamereni = TaggableManager(verbose_name='zaměření',
help_text='Zaměření M/F/I/O problému, příp. další tagy', blank=True)

6
seminar/templates/seminar/archiv/cisla.html

@ -8,10 +8,6 @@
{% endblock %}{% endblock %}
</h2>
<!-- <div class='nahledy_cisel'>
{% autoescape off %}{{ nahledy }}{% endautoescape %}
</div>-->
{% for rocnik, url_png in object_list.items %}
<div class="rocnik_pole">
@ -33,7 +29,7 @@
</div>
</div>
<div class="flip-card-back">
<div class="flip-card-back" id="archiv">
<div class="popis_rocniku">
Jednotlivá čísla:
<ul>

16
seminar/templates/seminar/jak-resit.html

@ -0,0 +1,16 @@
{% extends 'base.html' %}
{% load humanize %}
{% load staticfiles %}
{% block content %}
<div class=jakresit>
<img class="jakresit_obrazek" alt="" src="{% static 'images/jakresit_1.svg' %}" />
<img class="jakresit_obrazek" alt="" src="{% static 'images/jakresit_2.svg' %}" />
<img class="jakresit_obrazek" alt="" src="{% static 'images/jakresit_3.svg' %}" />
</div>
{% endblock %}

12
seminar/templates/seminar/novinky.html

@ -9,7 +9,7 @@
{% endif %}
{% if novinka.zverejneno or user.je_org %}
{# datum #}
<div><b>{{novinka.datum}}</b></div>
<div class=novinka_datum>{{novinka.datum}}</div>
{# text #}
{{ novinka.text | safe }}
{# obrazek #}
@ -25,12 +25,12 @@
</div>
{% endif %}
{# autor #}
<div class=novinky_name><p>{{novinka.autor.first_name}}
{% if novinka.autor.organizator.prezdivka%}
&bdquo;{{novinka.autor.organizator.prezdivka}}&ldquo;
<div class=novinka_autor>
{{novinka.autor.osoba.jmeno}}
{% if novinka.autor.osoba.prezdivka%}
&bdquo;{{novinka.autor.osoba.prezdivka}}&ldquo;
{% endif %}
{{novinka.autor.last_name}}
</p>
{{novinka.autor.osoba.prijmeni}}
</div>
{% endif %}
{% if not novinka.zverejneno and user.je_org %}

75
seminar/templates/seminar/titulnistrana.html

@ -5,32 +5,53 @@
{% block content %}
{# Uvitaci text #}
{% if nejblizsi_deadline %}
<div class="odpocet">
<p><b><big>Do konce <a href="/zadani/aktualni/">odeslání řešení</a> {% if typ_deadline == 'soustredeni' %}(pro účast na soustředění) {% elif typ_deadline == 'preddeadline' %}(pro otištění došlých řešení) {% endif %}zbývá:
{{nejblizsi_deadline|timeuntil}}</big></b></p>
</div>
{% endif %}
<div class=titulnistrana>
<div class="titulnistrana_obsah">
<div class="vitej_titulka">
<h1>
{% block nadpis1a %}{% block nadpis1b %}
Vítej!
{% endblock %}{% endblock %}
{% block nadpis1a %}
Vítej
{% endblock %}
mezi námi
</h1>
<p>
M&amp;M je korespondenční seminář. Několikrát do roka zdarma vydáváme časopis a v něm zajímavé podněty k přemýšlení. Ty na ně můžeš reagovat.<br>
M&amp;M je taky soutěž. Můžeš vyhrát knížky, deskovky nebo dokonce dort. Můžeš se dostat na matfyz bez přijímaček. A především s námi můžeš jet na skvělé soustředění.
</p>
<div>
M&amp;M je korespondenční seminář. Vydáváme časopis a v něm zajímavé podněty k přemýšlení. Ty na ně můžeš reagovat,
experimentovat a objevovat s námi fascinující zákoutí matiky, fyziky a informatiky.
<a href="auth/registrace"> <div class="button"> Zaregistruj se! </div> </a> {# FIXME odkaz #}
M&amp;M je taky soutěž. Za svá řešení dostaneš body a můžeš vyhrát zajímavé ceny, dostat se
na Matfyz bez přijímaček a především, můžeš s námi jet na skvělé soustředění.
<a href="cojemam/odmeny"> <div class="button"> Co můžeš vyhrát? </div> </a> {# FIXME odkaz #}
</div>
<div class="novinky">
{% if dead %}
<div class="odpocet">
<p><b>Do konce <a href="/zadani/aktualni/">odeslání řešení</a> {% if deadline_soustredeni %}(pro účast na soustředění) {% endif %}zbývá:<br>
<big>{{ted|timesince:dead}}</big></b></p>
</div>
{% endif %}
{# Novinky #}
<h1>Novinky</h1>
{% include 'seminar/novinky.html' %}
<div class="temata_titulka">
<h1>
Řeš témata!
</h1>
<div>
Přidej se k nám! Pusť se do řešení témát.
{% for tema in aktualni_temata %}
<a href="{{ tema.url }}"> <div class="button"> {{ tema.nazev }} </div> </a>
{% endfor %}
</div>
<a href='/stare-novinky/'>Archiv novinek</a>
</div>
<div class="graf">
<div class="graf-svg">
@ -38,8 +59,24 @@ M&amp;M je korespondenční seminář. Několikrát do roka zdarma vydáváme č
</div>
<span class="zjistit_vic">
<h2><a href="/co-je-MaM/uvod/">Zjistit víc!</a></h2>
<h2><a href="/co-je-MaM/uvod/">Zjisti víc!</a></h2>
<hr>
</span>
</div>
</div>
<div class="titulnistrana_novinky">
{# Novinky #}
<h1>Co je nového?</h1>
{% include 'seminar/novinky.html' %}
<a href='/stare-novinky/'>Archiv novinek</a>
</div>
</div>
{% endblock %}

3
seminar/urls.py

@ -17,7 +17,7 @@ urlpatterns = [
path('archiv/temata/', views.ArchivTemataView.as_view()),
path('rocnik/<int:rocnik>/', views.RocnikView.as_view(), name='seminar_rocnik'),
path('cislo/<int:rocnik>.<str:cislo>/', views.CisloView.as_view(), name='seminar_cislo'), # odkomentované jenom kvůli testování archivu
path('cislo/<int:rocnik>.<str:cislo>/', views.CisloView.as_view(), name='seminar_cislo'),
path('problem/<int:pk>/', views.ProblemView.as_view(), name='seminar_problem'),
path('treenode/<int:pk>/', views.TreeNodeView.as_view(), name='seminar_treenode'),
#path('problem/(?P<pk>\d+)/(?P<prispevek>\d+)/', views.PrispevekView.as_view(), name='seminar_problem_prispevek'),
@ -150,6 +150,7 @@ urlpatterns = [
path('temp/nahraj_reseni', resitel_required(views.NahrajReseniView.as_view()), name='seminar_nahraj_reseni'),
path('', views.TitulniStranaView.as_view(), name='titulni_strana'),
path('jak-resit/', views.JakResitView.as_view(), name='jak-resit'),
# Ceka na autocomplete v3
# path('autocomplete/organizatori/',

93
seminar/views/views_all.py

@ -24,7 +24,7 @@ from seminar import utils, treelib
from seminar.forms import PrihlaskaForm, LoginForm, ProfileEditForm
import seminar.forms as f
from datetime import timedelta, date, datetime
from datetime import timedelta, date, datetime, MAXYEAR
from django.utils import timezone
from itertools import groupby
from collections import OrderedDict
@ -44,14 +44,15 @@ import time
from seminar.utils import aktivniResitele, resi_v_rocniku
def verejna_temata(rocnik):
"""Vrací queryset zveřejněných témat v daném ročníku.
"""
return Problem.objects.filter(typ=Problem.TYP_TEMA, cislo_zadani__rocnik=rocnik, cislo_zadani__verejne_db=True).order_by('kod')
def temata_v_rocniku(rocnik):
return Problem.objects.filter(typ=Problem.TYP_TEMA, rocnik=rocnik)
# ze starého modelu
#def verejna_temata(rocnik):
# """
# Vrací queryset zveřejněných témat v daném ročníku.
# """
# return Problem.objects.filter(typ=Problem.TYP_TEMA, cislo_zadani__rocnik=rocnik, cislo_zadani__verejne_db=True).order_by('kod')
#
#def temata_v_rocniku(rocnik):
# return Problem.objects.filter(typ=Problem.TYP_TEMA, rocnik=rocnik)
def get_problemy_k_tematu(tema):
return Problem.objects.filter(nadproblem = tema)
@ -242,45 +243,51 @@ def spravne_novinky(request):
qs = qs.filter(zverejneno=True)
return qs.order_by('-datum')
def aktualni_temata(rocnik):
"""
Vrací PolymorphicQuerySet témat v daném ročníku, ke kterým se aktuálně něco odevzdat.
"""
return Tema.objects.filter(rocnik=rocnik, stav='zadany').order_by('kod')
class TitulniStranaView(generic.ListView):
template_name='seminar/titulnistrana.html'
def get_queryset(self):
return spravne_novinky(self.request)[:5]
return spravne_novinky(self.request)[:3]
def get_context_data(self, **kwargs):
context = super(TitulniStranaView, self).get_context_data(**kwargs)
nastaveni = get_object_or_404(Nastaveni)
# zjisteni spravneho terminu
if nastaveni.aktualni_cislo.datum_deadline_soustredeni:
cas_deadline_soustredeni = nastaveni.aktualni_cislo.\
datum_deadline_soustredeni
if (datetime.now().date() <= cas_deadline_soustredeni):
cas_deadline = cas_deadline_soustredeni
deadline_soustredeni = True
else:
cas_deadline = nastaveni.aktualni_cislo.datum_deadline
deadline_soustredeni = False
else:
cas_deadline = nastaveni.aktualni_cislo.datum_deadline
deadline_soustredeni = False
# Pokud neni zverejnene cislo nezverejnuj odpocet
if nastaveni.aktualni_cislo.verejne():
# pokus se zjistit termin odeslani a pokud neni zadany,
# nezverejnuj odpocet
context['deadline_soustredeni'] = deadline_soustredeni
deadline_soustredeni = (nastaveni.aktualni_cislo.datum_deadline_soustredeni, "soustredeni")
preddeadline = (nastaveni.aktualni_cislo.datum_preddeadline, "preddeadline")
deadline = (nastaveni.aktualni_cislo.datum_deadline, "deadline")
try:
context['dead'] = datetime.combine(cas_deadline,
datetime.max.time())
context['ted'] = datetime.now()
except:
context['dead'] = None
nejblizsi_deadline = sorted(filter(lambda dl: dl[0] is not None and dl[0] >= date.today(), [deadline_soustredeni, preddeadline, deadline]))[0]
except IndexError:
nejblizsi_deadline = (None, None) # neni zadna aktualni deadline
if nejblizsi_deadline[0] is not None:
context['nejblizsi_deadline'] = datetime.combine(nejblizsi_deadline[0], datetime.max.time())
else:
context['dead'] = None
context['deadline_soustredeni'] = deadline_soustredeni
context['nejblizsi_deadline'] = None
context['typ_deadline'] = nejblizsi_deadline[1]
# Aktuální témata
nazvy_a_odkazy_na_aktualni_temata = []
akt_temata = aktualni_temata(nastaveni.aktualni_rocnik)
for tema in akt_temata:
# FIXME: netuším, jestli funguje tema.verejne_url(), nemáme testdata na témátka - je to asi url vzhledem k ročníku
nazvy_a_odkazy_na_aktualni_temata.append({'nazev':tema.nazev,'url':tema.verejne_url()})
context['aktualni_temata'] = nazvy_a_odkazy_na_aktualni_temata
print(context)
return context
class StareNovinkyView(generic.ListView):
@ -343,7 +350,8 @@ class ArchivView(generic.ListView):
### Výsledky
def sloupec_s_poradim(setrizene_body):
""" Ze seznamu obsahujícího sestupně setřízené body řešitelů za daný ročník
"""
Ze seznamu obsahujícího sestupně setřízené body řešitelů za daný ročník
vytvoří seznam s pořadími (včetně 3.-5. a pak 2 volná místa atp.),
podle toho, jak jdou za sebou ve výsledkovce.
Parametr:
@ -383,7 +391,8 @@ def sloupec_s_poradim(setrizene_body):
return sloupec_s_poradim
def cisla_rocniku(rocnik, jen_verejne=True):
""" Vrátí všechna čísla daného ročníku.
"""
Vrátí všechna čísla daného ročníku.
Parametry:
rocnik (Rocnik): ročník semináře
jen_verejne (bool): zda se mají vrátit jen veřejná, nebo všechna čísla
@ -773,6 +782,7 @@ def vysledkovka_cisla(cislo, context=None):
return context
class CisloView(generic.DetailView):
# FIXME zobrazování témátek a vůbec, teď je tam jen odkaz na číslo v pdf
model = Cislo
template_name = 'seminar/archiv/cislo.html'
@ -1332,3 +1342,10 @@ def formularOKView(request):
}
return render(request, template_name, context)
#------------------ Jak řešit - možná má být udělané úplně jinak
class JakResitView(generic.ListView):
template_name = 'seminar/jak-resit.html'
def get_queryset(self):
return None

Loading…
Cancel
Save