add PageInfo options on WebsiteTemplateMixin, rewrite website views
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user