Přesun náhodných views do various
|
@ -51,6 +51,9 @@ urlpatterns = [
|
||||||
# Aesop (ma vlastni podadresare)
|
# Aesop (ma vlastni podadresare)
|
||||||
path('', include('aesop.urls')),
|
path('', include('aesop.urls')),
|
||||||
|
|
||||||
|
# Various = co se nevešlo jinam
|
||||||
|
path('', include('various.urls')),
|
||||||
|
|
||||||
# REST API
|
# REST API
|
||||||
# path('api/', include(router.urls)),
|
# path('api/', include(router.urls)),
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ import seminar.models as m
|
||||||
from . import forms as f
|
from . import forms as f
|
||||||
from .forms import OdevzdavatkoTabulkaFiltrForm as FiltrForm
|
from .forms import OdevzdavatkoTabulkaFiltrForm as FiltrForm
|
||||||
from seminar.utils import resi_v_rocniku
|
from seminar.utils import resi_v_rocniku
|
||||||
from seminar.views import formularOKView
|
from various.views.pomocne import formularOKView
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ from datetime import date
|
||||||
import logging
|
import logging
|
||||||
import csv
|
import csv
|
||||||
|
|
||||||
from seminar.views import formularOKView
|
from various.views.pomocne import formularOKView
|
||||||
from various.autentizace.views import LoginView
|
from various.autentizace.views import LoginView
|
||||||
from various.autentizace.utils import posli_reset_hesla
|
from various.autentizace.utils import posli_reset_hesla
|
||||||
|
|
||||||
|
|
|
@ -1,16 +0,0 @@
|
||||||
{% extends 'base.html' %}
|
|
||||||
|
|
||||||
{% load humanize %}
|
|
||||||
{% load static %}
|
|
||||||
|
|
||||||
|
|
||||||
{% block content %}
|
|
||||||
|
|
||||||
<div class=jakresit>
|
|
||||||
|
|
||||||
{% include 'seminar/jakresit/jakresit_1.svg' %}
|
|
||||||
{% include 'seminar/jakresit/jakresit_2.svg' %}
|
|
||||||
{% include 'seminar/jakresit/jakresit_3.svg' %}
|
|
||||||
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
|
@ -65,19 +65,11 @@ urlpatterns = [
|
||||||
org_required(views.TitulyView),
|
org_required(views.TitulyView),
|
||||||
name='seminar_cislo_titul'
|
name='seminar_cislo_titul'
|
||||||
),
|
),
|
||||||
path(
|
|
||||||
'stav',
|
|
||||||
org_required(views.StavDatabazeView),
|
|
||||||
name='stav_databaze'
|
|
||||||
),
|
|
||||||
path(
|
path(
|
||||||
'cislo/<int:trocnik>.<str:tcislo>/odmeny/<int:frocnik>.<str:fcislo>/',
|
'cislo/<int:trocnik>.<str:tcislo>/odmeny/<int:frocnik>.<str:fcislo>/',
|
||||||
org_required(views.OdmenyView.as_view()),
|
org_required(views.OdmenyView.as_view()),
|
||||||
name="seminar_archiv_odmeny"),
|
name="seminar_archiv_odmeny"),
|
||||||
|
|
||||||
path('', views.TitulniStranaView.as_view(), name='titulni_strana'),
|
|
||||||
path('jak-resit/', views.JakResitView.as_view(), name='jak_resit'),
|
|
||||||
|
|
||||||
# Dočasné & neodladěné:
|
# Dočasné & neodladěné:
|
||||||
path(
|
path(
|
||||||
'hidden/hromadne_pridani',
|
'hidden/hromadne_pridani',
|
||||||
|
|
|
@ -18,7 +18,6 @@ from seminar.models import Problem, Cislo, Reseni, Nastaveni, Rocnik, \
|
||||||
#from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva
|
#from .models import VysledkyZaCislo, VysledkyKCisluZaRocnik, VysledkyKCisluOdjakziva
|
||||||
from seminar import utils
|
from seminar import utils
|
||||||
from treenode import treelib
|
from treenode import treelib
|
||||||
from novinky.views import spravne_novinky
|
|
||||||
import treenode.templatetags as tnltt
|
import treenode.templatetags as tnltt
|
||||||
import treenode.serializers as vr
|
import treenode.serializers as vr
|
||||||
from vysledkovky.utils import body_resitelu, VysledkovkaCisla, \
|
from vysledkovky.utils import body_resitelu, VysledkovkaCisla, \
|
||||||
|
@ -37,7 +36,6 @@ from django.conf import settings
|
||||||
import unicodedata
|
import unicodedata
|
||||||
import logging
|
import logging
|
||||||
import time
|
import time
|
||||||
from collections.abc import Sequence
|
|
||||||
import http
|
import http
|
||||||
|
|
||||||
from seminar.utils import aktivniResitele
|
from seminar.utils import aktivniResitele
|
||||||
|
@ -226,33 +224,6 @@ def aktualni_temata(rocnik):
|
||||||
return Tema.objects.filter(rocnik=rocnik, stav='zadany').order_by('kod')
|
return Tema.objects.filter(rocnik=rocnik, stav='zadany').order_by('kod')
|
||||||
|
|
||||||
|
|
||||||
class TitulniStranaView(generic.ListView):
|
|
||||||
template_name= 'seminar/titulnistrana/titulnistrana.html'
|
|
||||||
|
|
||||||
def get_queryset(self):
|
|
||||||
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)
|
|
||||||
|
|
||||||
deadline = m.Deadline.objects.filter(deadline__gte=timezone.now()).order_by("deadline").first()
|
|
||||||
context['nejblizsi_deadline'] = deadline
|
|
||||||
|
|
||||||
# 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
|
|
||||||
|
|
||||||
### Co je M&M
|
### Co je M&M
|
||||||
|
|
||||||
|
|
||||||
|
@ -652,47 +623,7 @@ class ClankyResitelView(generic.ListView):
|
||||||
# queryset = Problem.objects.filter(stav=Problem.STAV_ZADANY).select_related('cislo_zadani__rocnik').order_by('-cislo_zadani__rocnik__rocnik', 'kod')
|
# queryset = Problem.objects.filter(stav=Problem.STAV_ZADANY).select_related('cislo_zadani__rocnik').order_by('-cislo_zadani__rocnik__rocnik', 'kod')
|
||||||
|
|
||||||
|
|
||||||
### Status
|
|
||||||
|
|
||||||
def StavDatabazeView(request):
|
|
||||||
# nastaveni = Nastaveni.objects.get()
|
|
||||||
problemy = utils.seznam_problemu()
|
|
||||||
muzi = Resitel.objects.filter(osoba__osloveni=m.Osoba.OSLOVENI_MUZSKE)
|
|
||||||
zeny = Resitel.objects.filter(osoba__osloveni=m.Osoba.OSLOVENI_ZENSKE)
|
|
||||||
return render(request, 'seminar/stav_databaze.html',
|
|
||||||
{
|
|
||||||
# 'nastaveni': nastaveni,
|
|
||||||
'problemy': problemy,
|
|
||||||
|
|
||||||
'resitele': Resitel.objects.all(),
|
|
||||||
'muzi': muzi,
|
|
||||||
'zeny': zeny,
|
|
||||||
'jmena_muzu': utils.histogram([r.osoba.jmeno for r in muzi]),
|
|
||||||
'jmena_zen': utils.histogram([r.osoba.jmeno for r in zeny]),
|
|
||||||
})
|
|
||||||
|
|
||||||
|
|
||||||
# Interní, nemá se nikdy objevit v urls (jinak to účastníci vytrolí)
|
|
||||||
def formularOKView(request, text='', dalsi_odkazy: Sequence[tuple[str, str]] = ()):
|
|
||||||
template_name = 'seminar/formular_ok.html'
|
|
||||||
odkazy = list(dalsi_odkazy) + [
|
|
||||||
# (Text, odkaz)
|
|
||||||
('Vrátit se na titulní stránku', reverse('titulni_strana')),
|
|
||||||
('Zobrazit aktuální zadání', reverse('seminar_aktualni_zadani')),
|
|
||||||
]
|
|
||||||
context = {
|
|
||||||
'odkazy': odkazy,
|
|
||||||
'text': text,
|
|
||||||
}
|
|
||||||
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/jakresit/jak-resit.html'
|
|
||||||
|
|
||||||
def get_queryset(self):
|
|
||||||
return None
|
|
||||||
|
|
||||||
class AktualniRocnikRedirectView(RedirectView):
|
class AktualniRocnikRedirectView(RedirectView):
|
||||||
permanent=False
|
permanent=False
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.views.generic import FormView, ListView
|
from django.views.generic import FormView, ListView
|
||||||
|
|
||||||
from seminar.views import formularOKView
|
from various.views.pomocne import formularOKView
|
||||||
from .forms import SifrovackaForm, NapovedaForm
|
from .forms import SifrovackaForm, NapovedaForm
|
||||||
from .models import OdpovedUcastnika, SpravnaOdpoved, Napoveda, NapovezenoUcastnikovi
|
from .models import OdpovedUcastnika, SpravnaOdpoved, Napoveda, NapovezenoUcastnikovi
|
||||||
from personalni.models import Resitel
|
from personalni.models import Resitel
|
||||||
|
|
16
various/templates/various/jakresit/jak-resit.html
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{% extends 'base.html' %}
|
||||||
|
|
||||||
|
{% load humanize %}
|
||||||
|
{% load static %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<div class=jakresit>
|
||||||
|
|
||||||
|
{% include 'various/jakresit/jakresit_1.svg' %}
|
||||||
|
{% include 'various/jakresit/jakresit_2.svg' %}
|
||||||
|
{% include 'various/jakresit/jakresit_3.svg' %}
|
||||||
|
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
Before Width: | Height: | Size: 664 KiB After Width: | Height: | Size: 664 KiB |
Before Width: | Height: | Size: 689 KiB After Width: | Height: | Size: 689 KiB |
Before Width: | Height: | Size: 767 KiB After Width: | Height: | Size: 767 KiB |
|
@ -10,7 +10,7 @@
|
||||||
<p>
|
<p>
|
||||||
Na této stránce velmi intenzivně pracujeme.
|
Na této stránce velmi intenzivně pracujeme.
|
||||||
Za dočasnou nedostupnost se omlouváme.
|
Za dočasnou nedostupnost se omlouváme.
|
||||||
Zkuste přejít na <a href="/">titulní stránku</a>
|
Zkuste přejít na <a href="/static">titulní stránku</a>
|
||||||
nebo se podívat na <a href="{% url 'seminar_aktualni_zadani' %}">aktuální zadání</a>.
|
nebo se podívat na <a href="{% url 'seminar_aktualni_zadani' %}">aktuální zadání</a>.
|
||||||
</p>
|
</p>
|
||||||
<img src="{% static '404.png' %}">
|
<img src="{% static '404.png' %}">
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
|
@ -79,7 +79,7 @@ function sousdeadline() {
|
||||||
<div class="graf">
|
<div class="graf">
|
||||||
|
|
||||||
<div class="graf-svg">
|
<div class="graf-svg">
|
||||||
{% include 'seminar/titulnistrana/graph.svg' %} <!-- TODO: aby to nemuselo být v templates -->
|
{% include 'various/titulnistrana/graph.svg' %} <!-- TODO: aby to nemuselo být v templates -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<span class="zjistit_vic">
|
<span class="zjistit_vic">
|
9
various/urls.py
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
from django.urls import path
|
||||||
|
from .views.final import TitulniStranaView, JakResitView, StavDatabazeView
|
||||||
|
from seminar.utils import org_required
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
path('', TitulniStranaView.as_view(), name='titulni_strana'),
|
||||||
|
path('jak-resit/', JakResitView.as_view(), name='jak_resit'),
|
||||||
|
path('stav', org_required(StavDatabazeView), name='stav_databaze'),
|
||||||
|
]
|
73
various/views/final.py
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
"""
|
||||||
|
Stránky, které se mi nepovedlo lépe zařadit.
|
||||||
|
|
||||||
|
Oproti `./pomocne.py` se tyto views používají přímo ve various
|
||||||
|
a naopak importují spoustu věcí odjinud
|
||||||
|
"""
|
||||||
|
|
||||||
|
from django.shortcuts import get_object_or_404, render
|
||||||
|
from django.utils import timezone
|
||||||
|
from django.views import generic
|
||||||
|
|
||||||
|
import novinky.views
|
||||||
|
import seminar.utils
|
||||||
|
import seminar.views
|
||||||
|
from personalni.models import Resitel
|
||||||
|
from seminar import models as m
|
||||||
|
|
||||||
|
from ..models import Nastaveni
|
||||||
|
|
||||||
|
|
||||||
|
class TitulniStranaView(generic.ListView):
|
||||||
|
template_name = 'various/titulnistrana/titulnistrana.html'
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return novinky.views.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)
|
||||||
|
|
||||||
|
deadline = m.Deadline.objects.filter(
|
||||||
|
deadline__gte=timezone.now()).order_by("deadline").first()
|
||||||
|
context['nejblizsi_deadline'] = deadline
|
||||||
|
|
||||||
|
# Aktuální témata
|
||||||
|
nazvy_a_odkazy_na_aktualni_temata = []
|
||||||
|
akt_temata = seminar.views.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
|
||||||
|
|
||||||
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
class JakResitView(generic.ListView):
|
||||||
|
template_name = 'various/jakresit/jak-resit.html'
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
### Status
|
||||||
|
def StavDatabazeView(request):
|
||||||
|
# nastaveni = Nastaveni.objects.get()
|
||||||
|
problemy = seminar.utils.seznam_problemu()
|
||||||
|
muzi = Resitel.objects.filter(osoba__osloveni=m.Osoba.OSLOVENI_MUZSKE)
|
||||||
|
zeny = Resitel.objects.filter(osoba__osloveni=m.Osoba.OSLOVENI_ZENSKE)
|
||||||
|
return render(request, 'various/stav_databaze.html', {
|
||||||
|
# 'nastaveni': nastaveni,
|
||||||
|
'problemy': problemy,
|
||||||
|
|
||||||
|
'resitele': Resitel.objects.all(),
|
||||||
|
'muzi': muzi,
|
||||||
|
'zeny': zeny,
|
||||||
|
'jmena_muzu': seminar.utils.histogram([r.osoba.jmeno for r in muzi]),
|
||||||
|
'jmena_zen': seminar.utils.histogram([r.osoba.jmeno for r in zeny]),
|
||||||
|
})
|
26
various/views/pomocne.py
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
"""
|
||||||
|
Stránky, které se mi nepovedlo lépe zařadit.
|
||||||
|
|
||||||
|
Oproti `./final.py` se tyto views importují odjinud
|
||||||
|
tedy ideálně neimportovat sem nic od jinud
|
||||||
|
"""
|
||||||
|
|
||||||
|
from typing import Sequence
|
||||||
|
|
||||||
|
from django.shortcuts import render
|
||||||
|
from django.urls import reverse
|
||||||
|
|
||||||
|
|
||||||
|
# Interní, nemá se nikdy objevit v urls (jinak to účastníci vytrolí)
|
||||||
|
def formularOKView(request, text='', dalsi_odkazy: Sequence[tuple[str, str]] = ()):
|
||||||
|
template_name = 'seminar/formular_ok.html'
|
||||||
|
odkazy = list(dalsi_odkazy) + [
|
||||||
|
# (Text, odkaz)
|
||||||
|
('Vrátit se na titulní stránku', reverse('titulni_strana')),
|
||||||
|
('Zobrazit aktuální zadání', reverse('seminar_aktualni_zadani')),
|
||||||
|
]
|
||||||
|
context = {
|
||||||
|
'odkazy': odkazy,
|
||||||
|
'text': text,
|
||||||
|
}
|
||||||
|
return render(request, template_name, context)
|
|
@ -1,7 +1,7 @@
|
||||||
from django.views.generic import FormView, ListView
|
from django.views.generic import FormView, ListView
|
||||||
|
|
||||||
from seminar.models import Osoba
|
from seminar.models import Osoba
|
||||||
from seminar.views import formularOKView
|
from various.views.pomocne import formularOKView
|
||||||
from .forms import UcastnikVyrociForm
|
from .forms import UcastnikVyrociForm
|
||||||
from .models import UcastnikVyroci
|
from .models import UcastnikVyroci
|
||||||
|
|
||||||
|
|