Gracefully handle nodes of a type for which we don't have a template.

Before, it would simply return a 500 Internal Server Error.
This commit is contained in:
Sybren A. Stüvel 2016-08-30 15:52:55 +02:00
parent 3f9d519753
commit 4529d0597b
3 changed files with 77 additions and 8 deletions

View File

@ -212,13 +212,23 @@ def view(node_id):
# template_path, node_type_name) # template_path, node_type_name)
# raise NotFound("Missing template '{0}'".format(template_path)) # raise NotFound("Missing template '{0}'".format(template_path))
return render_template(template_path, try:
node_id=node._id, return render_template(template_path,
node=node, node_id=node._id,
parent=node.parent, node=node,
children=children, parent=node.parent,
config=current_app.config, children=children,
api=api) config=current_app.config,
api=api)
except TemplateNotFound:
log.error('Template %s does not exist for node type %s', template_path, node_type_name)
return render_template('nodes/error_type_not_found.html',
node_id=node._id,
node=node,
parent=node.parent,
children=children,
config=current_app.config,
api=api)
def _view_handler_asset(node, template_path, template_action, link_allowed): def _view_handler_asset(node, template_path, template_action, link_allowed):

View File

@ -1119,7 +1119,6 @@ section.node-preview.group
border-radius: 3px border-radius: 3px
cursor: default cursor: default
.node-details-description .node-details-description
+node-details-description +node-details-description
@ -1492,6 +1491,9 @@ section.node-details-container
.featured-item-info .featured-item-info
opacity: 1 opacity: 1
.error-node-type-not-found
color: $color-danger
clear: both
.node-extra .node-extra
display: flex display: flex

View File

@ -0,0 +1,57 @@
| {% block body %}
#node-container
#node-overlay
section.node-details-container
.node-details-header
.node-title#node-title
| {{node.name}}
| {% if node.description %}
.node-details-description#node-description
| {{node.description}}
| {% endif %}
.node-details-meta.footer
p.error-node-type-not-found
| Sorry, I don't know how to display a node of type {{ node.node_type }}.
| {% if node.description %}
| I'll just show the description.
| {% endif %}
ul.node-details-meta-list
li.node-details-meta-list-item.status
| {{node.properties.status}}
li.node-details-meta-list-item.author
| {{ node.user.full_name }}
li.node-details-meta-list-item.date(title="Created {{ node._created }}")
| {{ node._created | pretty_date }}
| {% if (node._created | pretty_date) != (node._updated | pretty_date) %}
span(title="Updated {{ node._updated }}") (updated {{ node._updated | pretty_date }})
| {% endif %}
include custom/_scripts
| {% endblock %}
| {% block footer_scripts %}
script.
// Generate GA pageview
ga('send', 'pageview', location.pathname);
$('.sorry').click(function() {
$.get('/403', function(data) {
$('#node-overlay').html(data).show().addClass('active');
})
});
$('#node-overlay').click(function(){
$(this).removeClass('active').hide().html();
});
| {% endblock %}