www-bocal/mainsite/views.py

88 lines
2.3 KiB
Python
Raw Permalink Normal View History

from django.http import Http404, HttpResponse
2017-09-24 19:11:08 +02:00
from django.shortcuts import get_object_or_404, redirect
from django.views.generic import ListView, TemplateView
2017-09-21 19:38:49 +02:00
from mainsite.models import Publication, PublicationYear, SiteConfiguration
2017-09-21 10:58:19 +02:00
2017-09-21 14:00:10 +02:00
2019-01-19 17:28:24 +01:00
def robots_view(request):
"""Robots.txt view"""
2022-05-22 18:37:28 +02:00
body = "User-Agent: *\nDisallow: /\nAllow: /$\n"
2019-01-19 17:28:24 +01:00
return HttpResponse(body, content_type="text/plain")
class HomeView(TemplateView):
"""Website's homepage"""
2019-01-19 17:28:24 +01:00
template_name = "mainsite/homepage.html"
class WriteArticleView(TemplateView):
"""Tell the readers how they can contribute to the BOcal"""
2019-01-19 17:28:24 +01:00
template_name = "mainsite/write_article.html"
class PublicationListView(ListView):
"""
Display a list of publications (generic class).
"""
model = Publication
context_object_name = "publications"
2019-01-19 17:28:24 +01:00
template_name = "mainsite/publications_list_view.html"
def get_context_data(self, **kwargs):
ctx = super().get_context_data(**kwargs)
if len(ctx["publications"]) == 0:
raise Http404
return ctx
2017-09-21 19:38:49 +02:00
class YearView(PublicationListView):
"""Display a year worth of BOcals"""
def get_queryset(self):
year: int = self.kwargs.get("year")
nYear: int = self.kwargs.get("nYear")
if nYear != year + 1:
2017-09-21 14:00:10 +02:00
raise Http404
self.publication_year = get_object_or_404(PublicationYear, startYear=year)
2017-09-21 14:00:10 +02:00
return self.publication_year.publis()
def get_context_data(self, **kwargs):
return super().get_context_data(
intro_text=self.publication_year.descr,
is_year_view=True,
year_range=self.publication_year.prettyName,
**kwargs
)
class SpecialPublicationsView(PublicationListView):
"""Display the list of special publications"""
ordering = "-date"
def get_queryset(self):
return super().get_queryset().filter(is_special=True)
def get_context_data(self, **kwargs):
return super().get_context_data(
intro_text=SiteConfiguration.get_solo().specialPublisDescr,
is_year_view=False,
list_title="Numéros spéciaux",
**kwargs
)
2017-09-24 19:11:08 +02:00
def latestPublication(req):
"""Redirects to the latest standard publication"""
2017-09-24 19:11:08 +02:00
latestPubli = Publication.latest()
return redirect(latestPubli.url)