diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index 3167a63b0cc..a60ccdbe8cf 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -136,11 +136,8 @@ class Website(openerp.addons.web.controllers.main.Home): values = { 'path': path, } - try: - html = request.website.render(path, values) - except ValueError: - html = request.website.render('website.404', values) - return html + + return request.website.render(path, values) @website.route('/website/customize_template_toggle', type='json', auth='user') def customize_template_set(self, view_id): @@ -281,7 +278,8 @@ class Website(openerp.addons.web.controllers.main.Home): @website.route(['/robots.txt'], type='http', auth="public") def robots(self): - return request.website.render('website.robots', {'url_root': request.httprequest.url_root}) + body = request.website.render('website.robots', {'url_root': request.httprequest.url_root}) + return request.make_response(body, headers=[('Content-Type', 'text/plain')]) @website.route('/sitemap', type='http', auth='public', multilang=True) def sitemap(self, **kwargs): diff --git a/addons/website/models/website.py b/addons/website/models/website.py index be9a0d5375b..50d5ee662aa 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -2,22 +2,24 @@ import fnmatch import functools import operator +import logging +import math import simplejson - -import openerp -from openerp.osv import osv, fields -from openerp.addons.web import http -from openerp.addons.web.http import request +import traceback import urllib from urlparse import urljoin -import math -import traceback -from openerp.tools.safe_eval import safe_eval -from openerp.exceptions import AccessError, AccessDenied -import werkzeug -from openerp.addons.base.ir.ir_qweb import QWebException -import logging +import werkzeug +import werkzeug.exceptions +import werkzeug.wrappers + +import openerp +from openerp.exceptions import AccessError, AccessDenied +from openerp.osv import osv, fields +from openerp.tools.safe_eval import safe_eval +from openerp.addons.web import http +from openerp.addons.web.http import request + logger = logging.getLogger(__name__) def route(routes, *route_args, **route_kwargs): @@ -180,8 +182,7 @@ class website(osv.osv): try: view_ref = IMD.get_object_reference(cr, uid, module, xmlid) except ValueError: - logger.error("Website Rendering Error.\n\n%s" % traceback.format_exc()) - return self.render(cr, uid, ids, 'website.404', qweb_context) + return self.error(cr, uid, 404, qweb_context, context=context) if 'main_object' not in qweb_context: try: @@ -198,24 +199,23 @@ class website(osv.osv): logger.error(err) qweb_context['error'] = err[1] logger.warn("Website Rendering Error.\n\n%s" % traceback.format_exc()) - return self.render(cr, uid, ids, 'website.401', qweb_context) - except (QWebException,), err: + return self.error(cr, uid, 401, qweb_context, context=context) + except Exception, e: + qweb_context['template'] = getattr(e, 'qweb_template', '') + node = getattr(e, 'qweb_node', None) + qweb_context['node'] = node and node.toxml() + qweb_context['expr'] = getattr(e, 'qweb_eval', '') qweb_context['traceback'] = traceback.format_exc() - qweb_context['template'] = err.template - qweb_context['message'] = err.message - qweb_context['node'] = err.node and err.node.toxml() - logger.error("Website Rendering Error.\n%(message)s\n%(node)s\n\n%(traceback)s" % qweb_context) - return view.render( - cr, uid, - 'website.500' if qweb_context['editable'] else 'website.404', - qweb_context, context=context) - except Exception: - logger.exception("Website Rendering Error.") - qweb_context['traceback'] = traceback.format_exc() - return view.render( - cr, uid, - 'website.500' if qweb_context['editable'] else 'website.404', - qweb_context, context=context) + logger.exception("Website Rendering Error.\n%(template)s\n%(expr)s\n%(node)s" % qweb_context) + return self.error(cr, uid, 500 if qweb_context['editable'] else 404, + qweb_context, context=context) + + def error(self, cr, uid, code, qweb_context, context=None): + View = request.registry['ir.ui.view'] + return werkzeug.wrappers.Response( + View.render(cr, uid, 'website.%d' % code, qweb_context), + status=code, + content_type='text/html;charset=utf-8') def pager(self, cr, uid, ids, url, total, page=1, step=30, scope=5, url_args=None): # Compute Pager diff --git a/addons/website/static/src/js/website.snippets.js b/addons/website/static/src/js/website.snippets.js index a390101fa84..41ae03ed78b 100644 --- a/addons/website/static/src/js/website.snippets.js +++ b/addons/website/static/src/js/website.snippets.js @@ -589,7 +589,8 @@ * Displayed into the overlay options on focus */ _readXMLData: function() { - this.$el = this.parent.$snippets.siblings("[data-snippet-id='"+this.snippet_id+"']").clone(); + var self = this; + this.$el = this.parent.$snippets.filter(function () { return $(this).data("snippet-id") == self.snippet_id; }).clone(); this.$editor = this.$el.find(".oe_snippet_options"); var $options = this.$overlay.find(".oe_overlay_options"); this.$editor.prependTo($options.find(".oe_options ul")); diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml index 9e9d9c8be2e..6ef247738bf 100644 --- a/addons/website/views/website_templates.xml +++ b/addons/website/views/website_templates.xml @@ -391,8 +391,8 @@