diff --git a/combo/data/models.py b/combo/data/models.py index b940f692..1a0e5011 100644 --- a/combo/data/models.py +++ b/combo/data/models.py @@ -233,10 +233,15 @@ class Page(models.Model): return Page.objects.filter(parent_id=self.id).exists() def get_template_display_name(self): - return settings.COMBO_PUBLIC_TEMPLATES[self.template_name]['name'] + try: + return settings.COMBO_PUBLIC_TEMPLATES[self.template_name]['name'] + except KeyError: + return _('Unknown (%s)') % self.template_name def missing_template(self): - template_name = settings.COMBO_PUBLIC_TEMPLATES.get(self.template_name).get('template') + template_name = settings.COMBO_PUBLIC_TEMPLATES.get(self.template_name, {}).get('template') + if not template_name: + return True try: template.loader.select_template([template_name]) except TemplateDoesNotExist: @@ -246,15 +251,18 @@ class Page(models.Model): def get_placeholders(self, request, traverse_cells=False, template_name=None): placeholders = [] - page_template = settings.COMBO_PUBLIC_TEMPLATES.get(template_name or self.template_name) + 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, 'combo/page_template.html']) + template_names = [] + if page_template.get('template'): + template_names.append(page_template['template']) + template_names.append('combo/page_template.html') + tmpl = template.loader.select_template(template_names) request = RequestFactory(SERVER_NAME=request.get_host()).get(self.get_online_url()) request.user = None context = { diff --git a/tests/test_manager.py b/tests/test_manager.py index a864d836..3352854d 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -120,6 +120,14 @@ def test_edit_page(app, admin_user): resp = resp.follow() assert Page.objects.all()[0].exclude_from_navigation is True +def test_edit_page_unknown_template(app, admin_user): + Page.objects.all().delete() + page = Page(title='One', slug='one', template_name='broken') + page.save() + app = login(app) + resp = app.get('/manage/pages/%s/' % page.id) + assert 'Unknown (broken)' in resp.text + def test_page_edit_slug(app, admin_user): Page.objects.all().delete() page = Page(title='One', slug='one', template_name='standard')