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):
|
class MaraudesView(views.WebsiteProtectedMixin):
|
||||||
title = "Maraudes"
|
|
||||||
header = "Maraudes"
|
class PageInfo:
|
||||||
|
title = "Maraudes ALSA"
|
||||||
|
|
||||||
permissions = ['maraudes.view_maraudes']
|
permissions = ['maraudes.view_maraudes']
|
||||||
|
|
||||||
@@ -47,8 +48,11 @@ class DerniereMaraudeMixin(object):
|
|||||||
return context
|
return context
|
||||||
|
|
||||||
class IndexView(MaraudesView, DerniereMaraudeMixin, generic.TemplateView):
|
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"
|
template_name = "maraudes/index.html"
|
||||||
|
|
||||||
@@ -61,8 +65,10 @@ class MaraudeDetailsView(MaraudesView, DerniereMaraudeMixin, generic.DetailView)
|
|||||||
template_name = "maraudes/details.html"
|
template_name = "maraudes/details.html"
|
||||||
|
|
||||||
# Template
|
# Template
|
||||||
header = "Maraude"
|
class PageInfo:
|
||||||
header_small = "Celle-ci"
|
title = "Maraude - {{maraude.date}}"
|
||||||
|
header = "{{maraude.date}}"
|
||||||
|
header_small = "détails"
|
||||||
|
|
||||||
def get_context_data(self, **kwargs):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
@@ -79,6 +85,10 @@ class MaraudeListView(MaraudesView, generic.ListView):
|
|||||||
template_name = "maraudes/list.html"
|
template_name = "maraudes/list.html"
|
||||||
paginate_by = 10
|
paginate_by = 10
|
||||||
|
|
||||||
|
class PageInfo:
|
||||||
|
title = "Maraude - Liste des maraudes"
|
||||||
|
header = "Liste des maraudes"
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
today = datetime.date.today()
|
today = datetime.date.today()
|
||||||
return super().get_queryset().filter(
|
return super().get_queryset().filter(
|
||||||
@@ -93,11 +103,14 @@ class CompteRenduCreateView(MaraudesView, generic.DetailView):
|
|||||||
template_name = "compte_rendu/compterendu_create.html"
|
template_name = "compte_rendu/compterendu_create.html"
|
||||||
context_object_name = "maraude"
|
context_object_name = "maraude"
|
||||||
|
|
||||||
header = "Compte-rendu"
|
|
||||||
header_small = "maraude"
|
|
||||||
form = None
|
form = None
|
||||||
inline_formset = 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):
|
def get_forms(self, *args, initial=None):
|
||||||
self.form = RencontreForm(*args,
|
self.form = RencontreForm(*args,
|
||||||
initial=initial)
|
initial=initial)
|
||||||
@@ -179,6 +192,11 @@ class CompteRenduUpdateView(MaraudesView, generic.DetailView):
|
|||||||
context_object_name = "maraude"
|
context_object_name = "maraude"
|
||||||
template_name = "compte_rendu/compterendu_update.html"
|
template_name = "compte_rendu/compterendu_update.html"
|
||||||
|
|
||||||
|
class PageInfo:
|
||||||
|
title = "{{maraude}} - Compte-rendu"
|
||||||
|
header = "{{maraude.date}}"
|
||||||
|
header_small = "compte-rendu"
|
||||||
|
|
||||||
base_formset = None
|
base_formset = None
|
||||||
inline_formsets = []
|
inline_formsets = []
|
||||||
rencontres_queryset = None
|
rencontres_queryset = None
|
||||||
@@ -241,9 +259,10 @@ class PlanningView(MaraudesView, generic.TemplateView):
|
|||||||
|
|
||||||
template_name = "planning/planning.html"
|
template_name = "planning/planning.html"
|
||||||
|
|
||||||
title = "Planning"
|
class PageInfo:
|
||||||
header = "Plannification des maraudes"
|
title = "Planning"
|
||||||
header_small = "Mois Année"
|
header = "Planning"
|
||||||
|
header_small = "{{month}} {{year}}" #TODO: does not parse extra context
|
||||||
|
|
||||||
def _parse_request(self):
|
def _parse_request(self):
|
||||||
self.current_date = datetime.date.today()
|
self.current_date = datetime.date.today()
|
||||||
@@ -310,6 +329,9 @@ class LieuCreateView(views.WebsiteProtectedWithAjaxMixin, generic.edit.CreateVie
|
|||||||
fields = "__all__"
|
fields = "__all__"
|
||||||
success_url = "/maraudes/"
|
success_url = "/maraudes/"
|
||||||
|
|
||||||
|
class PageInfo:
|
||||||
|
pass
|
||||||
|
|
||||||
permissions = ['maraudes.add_lieu']
|
permissions = ['maraudes.add_lieu']
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
|
|||||||
@@ -10,15 +10,20 @@ from sujets.models import Sujet
|
|||||||
|
|
||||||
|
|
||||||
class SuivisView(views.WebsiteProtectedMixin):
|
class SuivisView(views.WebsiteProtectedMixin):
|
||||||
title = "Suivi des bénéficiaires"
|
|
||||||
header = "Suivi"
|
class PageInfo:
|
||||||
|
title = "Suivi des bénéficiaires"
|
||||||
|
|
||||||
permissions = ['sujets.view_sujets']
|
permissions = ['sujets.view_sujets']
|
||||||
|
|
||||||
|
|
||||||
class IndexView(SuivisView, generic.TemplateView):
|
class IndexView(SuivisView, generic.TemplateView):
|
||||||
template_name = "suivi/index.html"
|
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):
|
class SuiviSujetView(SuivisView, generic.DetailView):
|
||||||
@@ -26,6 +31,11 @@ class SuiviSujetView(SuivisView, generic.DetailView):
|
|||||||
template_name = "suivi/details.html"
|
template_name = "suivi/details.html"
|
||||||
context_object_name = "sujet"
|
context_object_name = "sujet"
|
||||||
|
|
||||||
|
class PageInfo:
|
||||||
|
title = "Sujet - {{sujet}}"
|
||||||
|
header = "{{sujet}}"
|
||||||
|
header_small = "suivi"
|
||||||
|
|
||||||
def get_context_data(self, *args, **kwargs):
|
def get_context_data(self, *args, **kwargs):
|
||||||
context = super().get_context_data(*args, **kwargs)
|
context = super().get_context_data(*args, **kwargs)
|
||||||
context['notes'] = self.object.notes.by_date(reverse=True)
|
context['notes'] = self.object.notes.by_date(reverse=True)
|
||||||
|
|||||||
@@ -10,10 +10,12 @@ from django.forms import ModelForm
|
|||||||
# Create your views here.
|
# Create your views here.
|
||||||
|
|
||||||
class SujetsView(views.WebsiteProtectedMixin):
|
class SujetsView(views.WebsiteProtectedMixin):
|
||||||
title = "Sujets"
|
|
||||||
|
class PageInfo:
|
||||||
|
title = "Sujets"
|
||||||
|
|
||||||
def get_active_app(self):
|
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"
|
template_name = "sujets/sujet_details.html"
|
||||||
model = Sujet
|
model = Sujet
|
||||||
|
|
||||||
|
class PageInfo:
|
||||||
|
title = "Sujet - {{ sujet }}"
|
||||||
|
header = "{{ sujet }}"
|
||||||
|
header_small = "suivi"
|
||||||
|
|
||||||
class SujetListView(SujetsView, generic.ListView):
|
class SujetListView(SujetsView, generic.ListView):
|
||||||
model = Sujet
|
model = Sujet
|
||||||
template_name = "sujets/sujet_liste.html"
|
template_name = "sujets/sujet_liste.html"
|
||||||
|
|
||||||
|
class PageInfo:
|
||||||
|
title = "Sujet - Liste des sujets"
|
||||||
|
header = "Liste des sujets"
|
||||||
|
|
||||||
|
|
||||||
class SujetUpdateView(SujetsView, generic.edit.UpdateView):
|
class SujetUpdateView(SujetsView, generic.edit.UpdateView):
|
||||||
@@ -34,6 +42,11 @@ class SujetUpdateView(SujetsView, generic.edit.UpdateView):
|
|||||||
model = Sujet
|
model = Sujet
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
class PageInfo:
|
||||||
|
title = "Mise à jour - {{sujet}}"
|
||||||
|
header = "{{sujet}}"
|
||||||
|
header_small = "mise à jour"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class SujetCreateForm(ModelForm):
|
class SujetCreateForm(ModelForm):
|
||||||
@@ -47,8 +60,9 @@ class SujetCreateView(views.WebsiteProtectedWithAjaxMixin, generic.edit.CreateVi
|
|||||||
template_name = "sujets/sujet_create.html"
|
template_name = "sujets/sujet_create.html"
|
||||||
form_class = SujetCreateForm
|
form_class = SujetCreateForm
|
||||||
|
|
||||||
title = "Création : Sujet"
|
class PageInfo:
|
||||||
header = "Ajouter un sujet"
|
title = "Nouveau sujet"
|
||||||
|
header = "Nouveau sujet"
|
||||||
|
|
||||||
permissions = ['sujets.view_sujets', 'sujets.add_sujet']
|
permissions = ['sujets.view_sujets', 'sujets.add_sujet']
|
||||||
|
|
||||||
@@ -64,3 +78,6 @@ class SujetCreateView(views.WebsiteProtectedWithAjaxMixin, generic.edit.CreateVi
|
|||||||
except:
|
except:
|
||||||
context['next'] = None
|
context['next'] = None
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
#Hack
|
||||||
|
get_active_app = SujetsView.get_active_app
|
||||||
|
|||||||
@@ -2,8 +2,11 @@ import datetime
|
|||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
from django.views.generic.base import ContextMixin, TemplateResponseMixin
|
from django.views.generic.base import ContextMixin, TemplateResponseMixin
|
||||||
|
|
||||||
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
|
|
||||||
from django.apps import apps
|
from django.apps import apps
|
||||||
from django.contrib.auth.decorators import login_required, permission_required
|
from django.contrib.auth.decorators import login_required, permission_required
|
||||||
|
from django.template import Template, Context
|
||||||
|
|
||||||
## Utils ##
|
## Utils ##
|
||||||
def get_apps(app_names):
|
def get_apps(app_names):
|
||||||
@@ -47,11 +50,6 @@ class WebsiteTemplateMixin(TemplateResponseMixin):
|
|||||||
If 'content_template' is not defined, value will fallback to template_name
|
If 'content_template' is not defined, value will fallback to template_name
|
||||||
in child view.
|
in child view.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
#TODO: class Template:
|
|
||||||
title = "Maraudes ALSA"
|
|
||||||
header = "Page Header"
|
|
||||||
header_small = None
|
|
||||||
content_template = None
|
content_template = None
|
||||||
|
|
||||||
class Configuration:
|
class Configuration:
|
||||||
@@ -60,6 +58,19 @@ class WebsiteTemplateMixin(TemplateResponseMixin):
|
|||||||
|
|
||||||
apps = get_apps(navbar_apps)
|
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):
|
def get_template_names(self):
|
||||||
""" Ensure same template for all children views. """
|
""" Ensure same template for all children views. """
|
||||||
return ["base_site.html"]
|
return ["base_site.html"]
|
||||||
@@ -95,6 +106,15 @@ class WebsiteTemplateMixin(TemplateResponseMixin):
|
|||||||
def get_prochaine_maraude(self):
|
def get_prochaine_maraude(self):
|
||||||
return apps.get_model('maraudes', model_name="Maraude").objects.next
|
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):
|
def get_context_data(self, **kwargs):
|
||||||
context = super().get_context_data(**kwargs)
|
context = super().get_context_data(**kwargs)
|
||||||
|
|
||||||
@@ -102,15 +122,13 @@ class WebsiteTemplateMixin(TemplateResponseMixin):
|
|||||||
context['apps'] = self.Configuration.apps
|
context['apps'] = self.Configuration.apps
|
||||||
context['active_app'] = self.get_active_app()
|
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['content_template'] = self.get_content_template()
|
||||||
context['panels'] = self.get_panels()
|
context['panels'] = self.get_panels()
|
||||||
|
|
||||||
context['prochaine_maraude_abs'] = self.get_prochaine_maraude()
|
context['prochaine_maraude_abs'] = self.get_prochaine_maraude()
|
||||||
context['prochaine_maraude'] = self.get_prochaine_maraude_for_user()
|
context['prochaine_maraude'] = self.get_prochaine_maraude_for_user()
|
||||||
|
|
||||||
|
self._update_context_with_rendered_blocks(context)
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user