manager: do not crash on page configured with a missing template (#23186)

This commit is contained in:
Frédéric Péters 2018-04-14 10:51:20 +02:00
parent f13b4cc5ac
commit db4436daff
3 changed files with 16 additions and 2 deletions

View File

@ -44,7 +44,7 @@ from django.utils.safestring import mark_safe
from django.utils.text import slugify
from django.utils.translation import ugettext_lazy as _
from django.forms.widgets import MediaDefiningClass
from django.template import Context, engines
from django.template import Context, engines, TemplateDoesNotExist
from django.test.client import RequestFactory
from .fields import RichTextField
@ -215,6 +215,14 @@ class Page(models.Model):
def get_template_display_name(self):
return settings.COMBO_PUBLIC_TEMPLATES[self.template_name]['name']
def missing_template(self):
template_name = settings.COMBO_PUBLIC_TEMPLATES.get(self.template_name).get('template')
try:
template.loader.select_template([template_name])
except TemplateDoesNotExist:
return True
return False
def get_placeholders(self, request, traverse_cells=False, template_name=None):
placeholders = []
@ -226,7 +234,7 @@ class Page(models.Model):
return placeholders
template_name = settings.COMBO_PUBLIC_TEMPLATES.get(self.template_name).get('template')
tmpl = template.loader.select_template([template_name])
tmpl = template.loader.select_template([template_name, 'combo/page_template.html'])
request = RequestFactory(SERVER_NAME=request.get_host()).get(self.get_online_url())
request.user = None
context = {

View File

@ -365,3 +365,8 @@ span.extra-info {
img.page-picture {
max-width: 100%;
}
span.error {
color: red;
font-weight: bold;
}

View File

@ -43,6 +43,7 @@
<p>
<label>{% trans 'Template:' %}</label>
{{ object.get_template_display_name }}
{% if object.missing_template %}<span class="error">({% trans "missing" %})</span>{% endif %}
(<a rel="popup" href="{% url 'combo-manager-page-select-template' pk=object.id %}">{% trans 'change' %}</a>)
</p>