From 34f6fc985bd005586276e1a8720579b6ca538682 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20P=C3=A9ters?= Date: Fri, 13 Oct 2017 10:34:02 +0200 Subject: [PATCH] general: extract placeholder details from templates instead of settings (#18925) --- combo/data/models.py | 32 ++++++++++++ combo/manager/views.py | 30 ++++++----- .../public/templates/combo/page_template.html | 8 +-- .../combo/page_template_sidebar.html | 8 +-- combo/public/templatetags/combo.py | 6 ++- combo/public/views.py | 15 +++--- combo/settings.py | 50 +------------------ .../gadjo/templates/combo/page_template.html | 3 +- .../combo/page_template_sidebar.html | 8 +-- tests/test_pages.py | 23 +++++++++ 10 files changed, 100 insertions(+), 83 deletions(-) diff --git a/combo/data/models.py b/combo/data/models.py index 0d73c94b..36b35635 100644 --- a/combo/data/models.py +++ b/combo/data/models.py @@ -77,6 +77,14 @@ def element_is_visible(element, user=None): return len(set(page_groups).intersection(user.groups.all())) > 0 +class Placeholder(object): + def __init__(self, key, name=None, internal=False, acquired=False): + self.key = key + self.name = name + self.internal = internal + self.acquired = acquired + + class PageManager(models.Manager): def get_by_natural_key(self, path): parts = [x for x in path.strip('/').split('/') if x] or ['index'] @@ -176,6 +184,30 @@ class Page(models.Model): def get_template_display_name(self): return settings.COMBO_PUBLIC_TEMPLATES[self.template_name]['name'] + def get_placeholders(self, template_name=None): + placeholders = [] + + page_template = settings.COMBO_PUBLIC_TEMPLATES.get(template_name or self.template_name) + if page_template.get('placeholders'): + # manual declaration + for key, options in page_template['placeholders'].items(): + placeholders.append(Placeholder(key=key, **options)) + return placeholders + + template_name = settings.COMBO_PUBLIC_TEMPLATES.get(self.template_name).get('template') + tmpl = template.loader.select_template([template_name]) + request = RequestFactory().get(self.get_online_url()) + request.user = None + context = RequestContext(request, { + 'page': self, + 'request': request, + 'synchronous': False, + 'placeholder_search_mode': True, + 'placeholders': placeholders, + }) + tmpl.render(context) + return placeholders + def get_next_page(self, user=None): pages = Page.get_as_reordered_flat_hierarchy(Page.objects.all()) this_page = [x for x in pages if x.id == self.id][0] diff --git a/combo/manager/views.py b/combo/manager/views.py index 930e4e44..dee1fd47 100644 --- a/combo/manager/views.py +++ b/combo/manager/views.py @@ -92,10 +92,10 @@ class PageAddView(CreateView): def form_valid(self, form): response = super(PageAddView, self).form_valid(form) if self.object.slug != 'index' or self.object.parent_id: - combo_template = settings.COMBO_PUBLIC_TEMPLATES.get(self.object.template_name) - for placeholder_key, placeholder in combo_template['placeholders'].items(): - if placeholder.get('acquired') is True: - ParentContentCell(page=self.object, placeholder=placeholder_key, order=0).save() + for placeholder in self.object.get_placeholders(): + if placeholder.acquired is True: + ParentContentCell(page=self.object, + placeholder=placeholder.key, order=0).save() return response @@ -121,18 +121,17 @@ class PageSelectTemplateView(PageEditView): new_template_name = self.object.template_name response = super(PageSelectTemplateView, self).form_valid(form) if old_template_name != new_template_name: - old_template = settings.COMBO_PUBLIC_TEMPLATES.get(old_template_name) - new_template = settings.COMBO_PUBLIC_TEMPLATES.get(new_template_name) + old_placeholder_keys = [x.key for x in self.get_object().get_placeholders()] page_cells = CellBase.get_cells(page_id=self.object.id) - for placeholder_key, placeholder in new_template['placeholders'].items(): - if not placeholder.get('acquired') is True: + for placeholder in self.object.get_placeholders(new_template_name): + if not placeholder.acquired: continue - if placeholder_key in old_template: + if placeholder.key in old_placeholder_keys: continue - if [x for x in page_cells if x.placeholder == placeholder_key]: + if [x for x in page_cells if x.placeholder == placeholder.key]: # skip placeholders that already have cells continue - ParentContentCell(page=self.object, placeholder=placeholder_key, order=0).save() + ParentContentCell(page=self.object, placeholder=placeholder.key, order=0).save() return response page_select_template = PageSelectTemplateView.as_view() @@ -211,13 +210,12 @@ class PageView(DetailView): placeholders = [] combo_template = settings.COMBO_PUBLIC_TEMPLATES.get(template) - for placeholder_key, placeholder in combo_template['placeholders'].items(): + for placeholder in self.object.get_placeholders(): placeholder_dict = { - 'key': placeholder_key, - 'name': placeholder['name'], + 'key': placeholder.key, + 'name': placeholder.name, } - placeholder_dict['cells'] = [x for x in cells if ( - x.placeholder == placeholder_key)] + placeholder_dict['cells'] = [x for x in cells if x.placeholder == placeholder.key] placeholders.append(placeholder_dict) context['placeholders'] = placeholders diff --git a/combo/public/templates/combo/page_template.html b/combo/public/templates/combo/page_template.html index a3f40eff..b5c38ecc 100644 --- a/combo/public/templates/combo/page_template.html +++ b/combo/public/templates/combo/page_template.html @@ -1,4 +1,4 @@ -{% load combo gadjo %} +{% load combo gadjo i18n %} @@ -28,12 +28,14 @@ {% endblock %} {% block combo-content %} - {% placeholder "content" %} + {% trans "Content" as name %} + {% placeholder "content" name=name %} {% endblock %}