add PageInfo options on WebsiteTemplateMixin, rewrite website views

This commit is contained in:
Arthur Gerbaud
2016-08-07 13:22:41 +02:00
parent 9bd225ce42
commit a5af70becb
4 changed files with 95 additions and 28 deletions

View File

@@ -24,8 +24,9 @@ from .forms import ( RencontreForm, RencontreInlineFormSet,
class MaraudesView(views.WebsiteProtectedMixin):
title = "Maraudes"
header = "Maraudes"
class PageInfo:
title = "Maraudes ALSA"
permissions = ['maraudes.view_maraudes']
@@ -47,8 +48,11 @@ class DerniereMaraudeMixin(object):
return context
class IndexView(MaraudesView, DerniereMaraudeMixin, generic.TemplateView):
header = "La Maraude"
header_small = "Tableau de bord"
class PageInfo:
title = "Maraude - Tableau de bord"
header = "La Maraude"
header_small = "Tableau de bord"
template_name = "maraudes/index.html"
@@ -61,8 +65,10 @@ class MaraudeDetailsView(MaraudesView, DerniereMaraudeMixin, generic.DetailView)
template_name = "maraudes/details.html"
# Template
header = "Maraude"
header_small = "Celle-ci"
class PageInfo:
title = "Maraude - {{maraude.date}}"
header = "{{maraude.date}}"
header_small = "détails"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
@@ -79,6 +85,10 @@ class MaraudeListView(MaraudesView, generic.ListView):
template_name = "maraudes/list.html"
paginate_by = 10
class PageInfo:
title = "Maraude - Liste des maraudes"
header = "Liste des maraudes"
def get_queryset(self):
today = datetime.date.today()
return super().get_queryset().filter(
@@ -93,11 +103,14 @@ class CompteRenduCreateView(MaraudesView, generic.DetailView):
template_name = "compte_rendu/compterendu_create.html"
context_object_name = "maraude"
header = "Compte-rendu"
header_small = "maraude"
form = None
inline_formset = None
class PageInfo:
title = "{{maraude}} - Compte-rendu"
header = "{{maraude.date}}"
header_small = "écriture du compte-rendu"
def get_forms(self, *args, initial=None):
self.form = RencontreForm(*args,
initial=initial)
@@ -179,6 +192,11 @@ class CompteRenduUpdateView(MaraudesView, generic.DetailView):
context_object_name = "maraude"
template_name = "compte_rendu/compterendu_update.html"
class PageInfo:
title = "{{maraude}} - Compte-rendu"
header = "{{maraude.date}}"
header_small = "compte-rendu"
base_formset = None
inline_formsets = []
rencontres_queryset = None
@@ -241,9 +259,10 @@ class PlanningView(MaraudesView, generic.TemplateView):
template_name = "planning/planning.html"
title = "Planning"
header = "Plannification des maraudes"
header_small = "Mois Année"
class PageInfo:
title = "Planning"
header = "Planning"
header_small = "{{month}} {{year}}" #TODO: does not parse extra context
def _parse_request(self):
self.current_date = datetime.date.today()
@@ -310,6 +329,9 @@ class LieuCreateView(views.WebsiteProtectedWithAjaxMixin, generic.edit.CreateVie
fields = "__all__"
success_url = "/maraudes/"
class PageInfo:
pass
permissions = ['maraudes.add_lieu']
def post(self, request, *args, **kwargs):

View File

@@ -10,15 +10,20 @@ from sujets.models import Sujet
class SuivisView(views.WebsiteProtectedMixin):
title = "Suivi des bénéficiaires"
header = "Suivi"
class PageInfo:
title = "Suivi des bénéficiaires"
permissions = ['sujets.view_sujets']
class IndexView(SuivisView, generic.TemplateView):
template_name = "suivi/index.html"
header_small = "Tableau de bord"
class PageInfo:
title = "Suivi des bénéficiaires"
header = "Suivi"
header_small = "Tableau de bord"
class SuiviSujetView(SuivisView, generic.DetailView):
@@ -26,6 +31,11 @@ class SuiviSujetView(SuivisView, generic.DetailView):
template_name = "suivi/details.html"
context_object_name = "sujet"
class PageInfo:
title = "Sujet - {{sujet}}"
header = "{{sujet}}"
header_small = "suivi"
def get_context_data(self, *args, **kwargs):
context = super().get_context_data(*args, **kwargs)
context['notes'] = self.object.notes.by_date(reverse=True)

View File

@@ -10,10 +10,12 @@ from django.forms import ModelForm
# Create your views here.
class SujetsView(views.WebsiteProtectedMixin):
title = "Sujets"
class PageInfo:
title = "Sujets"
def get_active_app(self):
return super().get_active_app(app_name='suivi')
return super(views.WebsiteProtectedMixin, self).get_active_app(app_name='suivi')
@@ -21,12 +23,18 @@ class SujetDetailsView(SujetsView, generic.DetailView):
template_name = "sujets/sujet_details.html"
model = Sujet
class PageInfo:
title = "Sujet - {{ sujet }}"
header = "{{ sujet }}"
header_small = "suivi"
class SujetListView(SujetsView, generic.ListView):
model = Sujet
template_name = "sujets/sujet_liste.html"
class PageInfo:
title = "Sujet - Liste des sujets"
header = "Liste des sujets"
class SujetUpdateView(SujetsView, generic.edit.UpdateView):
@@ -34,6 +42,11 @@ class SujetUpdateView(SujetsView, generic.edit.UpdateView):
model = Sujet
fields = '__all__'
class PageInfo:
title = "Mise à jour - {{sujet}}"
header = "{{sujet}}"
header_small = "mise à jour"
class SujetCreateForm(ModelForm):
@@ -47,8 +60,9 @@ class SujetCreateView(views.WebsiteProtectedWithAjaxMixin, generic.edit.CreateVi
template_name = "sujets/sujet_create.html"
form_class = SujetCreateForm
title = "Création : Sujet"
header = "Ajouter un sujet"
class PageInfo:
title = "Nouveau sujet"
header = "Nouveau sujet"
permissions = ['sujets.view_sujets', 'sujets.add_sujet']
@@ -64,3 +78,6 @@ class SujetCreateView(views.WebsiteProtectedWithAjaxMixin, generic.edit.CreateVi
except:
context['next'] = None
return context
#Hack
get_active_app = SujetsView.get_active_app

View File

@@ -2,8 +2,11 @@ import datetime
from django.utils import timezone
from django.views.generic.base import ContextMixin, TemplateResponseMixin
from django.core.exceptions import ImproperlyConfigured
from django.apps import apps
from django.contrib.auth.decorators import login_required, permission_required
from django.template import Template, Context
## Utils ##
def get_apps(app_names):
@@ -47,11 +50,6 @@ class WebsiteTemplateMixin(TemplateResponseMixin):
If 'content_template' is not defined, value will fallback to template_name
in child view.
"""
#TODO: class Template:
title = "Maraudes ALSA"
header = "Page Header"
header_small = None
content_template = None
class Configuration:
@@ -60,6 +58,19 @@ class WebsiteTemplateMixin(TemplateResponseMixin):
apps = get_apps(navbar_apps)
page_blocks = ['header', 'header_small', 'title']
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self._page_blocks = []
if not hasattr(self, "PageInfo"):
raise ImproperlyConfigured("You must define a PageInfo on ", self)
for attr, val in self.PageInfo.__dict__.items():
if attr[0] is not "_" and type(val) is str:
setattr(self, attr, Template(val))
self._page_blocks.append(attr)
def get_template_names(self):
""" Ensure same template for all children views. """
return ["base_site.html"]
@@ -95,6 +106,15 @@ class WebsiteTemplateMixin(TemplateResponseMixin):
def get_prochaine_maraude(self):
return apps.get_model('maraudes', model_name="Maraude").objects.next
def _update_context_with_rendered_blocks(self, context):
""" Render text for existing PageInfo attributes.
See Configuration.page_blocks for valid attribute names """
render_context = Context(context)
for attr in self._page_blocks:
name = "page_%s" % attr
context[name] = getattr(self, attr).render(render_context)
return context
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
@@ -102,15 +122,13 @@ class WebsiteTemplateMixin(TemplateResponseMixin):
context['apps'] = self.Configuration.apps
context['active_app'] = self.get_active_app()
context['page_title'] = self.title
context['page_header'] = self.header
context['page_header_small'] = self.header_small
context['content_template'] = self.get_content_template()
context['panels'] = self.get_panels()
context['prochaine_maraude_abs'] = self.get_prochaine_maraude()
context['prochaine_maraude'] = self.get_prochaine_maraude_for_user()
self._update_context_with_rendered_blocks(context)
return context