Browse Source

změny pouze v komentářích, odkomentovaná věc v urls.py, která nefunguje, ale nejde bez ní testovat archiv

export_seznamu_prednasek
Kateřina Čížková 5 years ago
parent
commit
5c97181062
  1. 2
      seminar/urls.py
  2. 64
      seminar/views.py

2
seminar/urls.py

@ -23,7 +23,7 @@ urlpatterns = [
path('archiv/temata/', views.ArchivTemataView.as_view()),
path('rocnik/<int:rocnik>/', views.RocnikView.as_view(), name='seminar_rocnik'),
#path('cislo/<int:rocnik>.<int:cislo>/', views.CisloView.as_view(), name='seminar_cislo'),
path('cislo/<int:rocnik>.<int:cislo>/', views.CisloView.as_view(), name='seminar_cislo'), # odkomentované jenom kvůli testování archivu
path('problem/<int:pk>/', views.ProblemView.as_view(), name='seminar_problem'),
#path('problem/(?P<pk>\d+)/(?P<prispevek>\d+)/', views.PrispevekView.as_view(), name='seminar_problem_prispevek'),

64
seminar/views.py

@ -62,7 +62,7 @@ class VlozBodyView(generic.ListView):
print(self.tema)
self.problemy = Problem.objects.filter(nadproblem = self.tema)
print(self.problemy)
self.reseni = Reseni.objects.filter(problem__in=self.problemy)
self.reseni = Reseni.objects.filter(problem__in=self.problemy)
print(self.reseni)
return self.reseni
@ -81,7 +81,7 @@ class ObalkovaniView(generic.ListView):
def get_context_data(self, **kwargs):
context = super(ObalkovaniView, self).get_context_data(**kwargs)
print(self.cislo)
context['cislo'] = self.cislo
context['cislo'] = self.cislo
return context
@ -130,8 +130,8 @@ def vytahniZLesaSeznam(tematko, koren, pouze_zajimave=False):
stack.append((wn.succ, wd, wr))
if isinstance(wn, s.TemaVCisleNode):
print("TEMA")
print(wn.tema.id)
print(tematko.id)
print(wn.tema.id)
print(tematko.id)
if wn.tema.id == tematko.id:
returnVal.append((posledni_cislo, 0))
print("PRIDANO")
@ -144,7 +144,7 @@ def vytahniZLesaSeznam(tematko, koren, pouze_zajimave=False):
tagClose = s.Text(na_web = "Zavírací srolovací tag")
tagCloseNode = s.TextNode(text = tagClose)
stack.append((tagCloseNode, wd, True))
if wn.first_child != None:
stack.append((wn.first_child, wd + 1, wr))
@ -152,14 +152,14 @@ def vytahniZLesaSeznam(tematko, koren, pouze_zajimave=False):
posledni_cislo = wn
print(wn)
if wr:
if wr:
print("ZAJIMAVE")
if pouze_zajimave:
if not wn.zajimave:
continue
returnVal.append((wn, wd))
return returnVal
def TematkoView(request, rocnik, tematko):
nastaveni = s.Nastaveni.objects.first()
rocnik_object = s.Rocnik.objects.filter(rocnik=rocnik)
@ -172,7 +172,7 @@ def TematkoView(request, rocnik, tematko):
pass
return render(request, 'seminar/tematka/toaletak.html', {})
def TemataRozcestnikView(request):
print("=============================================")
@ -198,17 +198,17 @@ def TemataRozcestnikView(request):
vcisle.append((odkaz[0].getOdkazStr(), odkaz[0].getOdkaz()))
if cislo != None:
cisla.append((cislo, vcisle))
print(cisla)
tematka.append({
"kod" : tematko_object.kod,
"nazev" : tematko_object.nazev,
"abstrakt" : tematko_object.abstrakt,
"abstrakt" : tematko_object.abstrakt,
"obrazek": tematko_object.obrazek,
"cisla" : cisla
})
return render(request, 'seminar/tematka/rozcestnik.html', {"tematka": tematka, "rocnik" : nastaveni.aktualni_rocnik().rocnik})
#def ZadaniAktualniVysledkovkaView(request):
# nastaveni = get_object_or_404(Nastaveni)
@ -311,7 +311,6 @@ class CojemamOrganizatoriStariView(generic.ListView):
### Archiv
class ArchivView(generic.ListView):
model = Rocnik
template_name='seminar/archiv/cisla.html'
@ -322,13 +321,16 @@ class ArchivView(generic.ListView):
vyska = 297 # px
sirka = 210 # px
# nejnovějších 10 zveřejněných čísel
cisla = Cislo.objects.filter(verejne_db=True)[:10]
# op = os.path, udělá z argumentů cestu
png_dir = op.join(settings.MEDIA_ROOT, "cislo", "png")
# seznam [(url obrázku, číslo)]
urls = []
# c je číslo, i je pořadí čísla
for i, c in enumerate(cisla):
if not c.pdf:
continue
@ -420,7 +422,7 @@ def sloupec_s_poradim(seznam_s_body):
sloupec_s_poradim.append("{}.".format(aktualni_poradi))
# pokud je skupina větší, vypíšu rozsah
else:
sloupec_s_poradim.append("{}.–{}.".format(aktualni_poradi,
sloupec_s_poradim.append("{}.–{}.".format(aktualni_poradi,
aktualni_poradi+velikost_skupiny-1))
# zvětšíme aktuální pořadí o tolik, kolik pozic bylo přeskočeno
aktualni_poradi = aktualni_poradi + velikost_skupiny
@ -428,9 +430,9 @@ def sloupec_s_poradim(seznam_s_body):
# spočítá součet bodů získaných daným řešitelem za zadaný problém a všechny jeho podproblémy
def __soucet_resitele_problemu(problem, resitel, cislo, soucet):
# sečteme body za daný problém přes všechna řešení daného problému
# sečteme body za daný problém přes všechna řešení daného problému
# od daného řešitele
reseni_resitele = problem.hodnoceni_set.filter(reseni__resitele=resitel,
reseni_resitele = problem.hodnoceni_set.filter(reseni__resitele=resitel,
cislo_body=cislo)
# XXX chyba na řádku výše - řešení může mít více řešitelů, asi chceme contains
# nebo in
@ -438,7 +440,7 @@ def __soucet_resitele_problemu(problem, resitel, cislo, soucet):
soucet += r.body
# a přičteme k tomu hodnocení všech podproblémů
for p in problem.podproblem.all():
for p in problem.podproblem.all():
# i přes jméno by to měla být množina jeho podproblémů
soucet += __soucet_resitele_problemu(p, resitel, soucet)
return soucet
@ -451,25 +453,25 @@ def body_resitele_problemu_v_cisle(problem, resitel, cislo):
# vrátí list všech problémů s body v daném čísle, které již nemají nadproblém
def hlavni_problemy_cisla(cislo):
hodnoceni = cislo.hodnoceni.select_related('problem', 'reseni').all() # hodnocení, která se vážou k danému číslu
reseni = [h.reseni for h in hodnoceni]
problemy = [h.problem for h in hodnoceni]
problemy_set = set(problemy) # chceme každý problém unikátně,
problemy = (list(problemy_set)) # převedení na množinu a zpět to zaručí
# hlavní problémy čísla
# hlavní problémy čísla
# (mají vlastní sloupeček ve výsledkovce, nemají nadproblém)
hlavni_problemy = []
for p in problemy:
while not(p.nadproblem == None):
p = p.nadproblem
hlavni_problemy.append(p)
# zunikátnění
hlavni_problemy_set = set(hlavni_problemy)
hlavni_problemy = list(hlavni_problemy_set)
hlavni_problemy.sort(key=lambda k: k.kod_v_rocniku()) # setřídit podle t1, t2, c3, ...
return hlavni_problemy
def body_resitele_odjakziva(resitel):
@ -495,7 +497,7 @@ def body_resitele_v_cisle(resitel, cislo):
def body_resitele_v_rocniku(resitel, rocnik, do_cisla=None):
# pokud do_cisla=None, tak do posledního čísla v ročníku
# do_cisla je objekt Cislo
cisla = rocnik.cisla.all() # funkce vrátí pole objektů
cisla = rocnik.cisla.all() # funkce vrátí pole objektů
# Cislo už lexikograficky setřízené, viz models
body = 0
for cislo in cisla:
@ -671,7 +673,7 @@ class CisloView(generic.DetailView):
# generujeme sloupec s pořadím pomocí stejně zvané funkce
pocty_bodu = [rv.body_rocnik for rv in radky_vysledkovky]
sloupec_poradi = sloupec_s_poradim(pocty_bodu)
# každému řádku výsledkovky přidáme jeho pořadí
i = 0
for rv in radky_vysledkovky:
@ -680,7 +682,7 @@ class CisloView(generic.DetailView):
# vytahané informace předáváme do kontextu
context['cislo'] = cislo
context['radky_vysledkovky'] = radky_vysledkovky
context['radky_vysledkovky'] = radky_vysledkovky
context['problemy'] = hlavni_problemy
# context['v_cisle_zadane'] = TODO
# context['resene_problemy'] = resene_problemy
@ -1164,7 +1166,7 @@ def loginView(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
user = authenticate(request,
user = authenticate(request,
username=form.cleaned_data['username'],
password=form.cleaned_data['password'])
print(form.cleaned_data)
@ -1172,8 +1174,8 @@ def loginView(request):
login(request,user)
return HttpResponseRedirect('/')
else:
return render(request,
'seminar/login.html',
return render(request,
'seminar/login.html',
{'form': form, 'login_error': 'Neplatné jméno nebo heslo'})
else:
@ -1191,7 +1193,7 @@ def logoutView(request):
def prihlaska_log_gdpr_safe(logger, gdpr_logger, msg, form_data):
msg = "{}, form_hash:{}".format(msg,hash(form_data))
logger.warn(msg)
gdpr_logger.warn(msg+", form:{}".format(form_data))
gdpr_logger.warn(msg+", form:{}".format(form_data))
from django.forms.models import model_to_dict
def resitelEditView(request):
@ -1201,7 +1203,7 @@ def resitelEditView(request):
osoba_edit = Osoba.objects.get(user=u)
resitel_edit = osoba_edit.resitel
user_edit = osoba_edit.user
## Vytvoření slovníku, kterým předvyplním formulář
## Vytvoření slovníku, kterým předvyplním formulář
prefill_1=model_to_dict(user_edit)
prefill_2=model_to_dict(resitel_edit)
prefill_3=model_to_dict(osoba_edit)
@ -1259,7 +1261,7 @@ def prihlaskaView(request):
fcd = form.cleaned_data
form_hash = hash(fcd)
form_logger.info(fcd,form_hash=form_hash)
with transaction.atomic():
u = User.objects.create_user(
username=fcd['username'],
@ -1298,7 +1300,7 @@ def prihlaskaView(request):
rok_maturity = fcd['rok_maturity'],
zasilat = fcd['zasilat']
)
r.save()
r.osoba = o
if fcd.get('skola'):
@ -1328,7 +1330,7 @@ class SkolaAutocomplete(autocomplete.Select2QuerySetView):
Q(kratky_nazev__istartswith=self.q)|
Q(ulice__istartswith=self.q)|
Q(mesto__istartswith=self.q))
return qs
class LoginRequiredAjaxMixin(object):

Loading…
Cancel
Save