[IMP] preload records and throw 404 if not exists for blog, event, product
bzr revid: fme@openerp.com-20131205155450-y6joi29l2cn9amkn
This commit is contained in:
parent
bba940105a
commit
7a3b490f46
|
@ -80,6 +80,23 @@ def urlplus(url, params):
|
||||||
def quote_plus(value):
|
def quote_plus(value):
|
||||||
return urllib.quote_plus(value.encode('utf-8') if isinstance(value, unicode) else str(value))
|
return urllib.quote_plus(value.encode('utf-8') if isinstance(value, unicode) else str(value))
|
||||||
|
|
||||||
|
def preload_records(*args, **kwargs):
|
||||||
|
""" This helper allows to check the existence and prefetch one or many browse_records at once.
|
||||||
|
If the browse record(s) does not exists in the db it will raise a LazyResponse
|
||||||
|
"""
|
||||||
|
field = kwargs.pop('field', 'name')
|
||||||
|
on_error = kwargs.pop('on_error', 'website.404')
|
||||||
|
error_code = kwargs.pop('error_code', 404)
|
||||||
|
try:
|
||||||
|
for arg in args:
|
||||||
|
if isinstance(arg, orm.browse_record):
|
||||||
|
arg[field]
|
||||||
|
elif isinstance(arg, orm.browse_record_list):
|
||||||
|
[record[field] for record in arg]
|
||||||
|
except:
|
||||||
|
lazy_error = request.website.render(on_error, status_code=error_code)
|
||||||
|
raise werkzeug.exceptions.HTTPException(response=lazy_error)
|
||||||
|
|
||||||
class website(osv.osv):
|
class website(osv.osv):
|
||||||
def _get_menu_website(self, cr, uid, ids, context=None):
|
def _get_menu_website(self, cr, uid, ids, context=None):
|
||||||
# IF a menu is changed, update all websites
|
# IF a menu is changed, update all websites
|
||||||
|
|
|
@ -97,6 +97,7 @@ class WebsiteBlog(http.Controller):
|
||||||
"""
|
"""
|
||||||
BYPAGE = 10
|
BYPAGE = 10
|
||||||
|
|
||||||
|
website.preload_records(category, tag)
|
||||||
cr, uid, context = request.cr, request.uid, request.context
|
cr, uid, context = request.cr, request.uid, request.context
|
||||||
blog_post_obj = request.registry['blog.post']
|
blog_post_obj = request.registry['blog.post']
|
||||||
|
|
||||||
|
@ -178,6 +179,8 @@ class WebsiteBlog(http.Controller):
|
||||||
- 'nav_list': a dict [year][month] for archives navigation
|
- 'nav_list': a dict [year][month] for archives navigation
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
website.preload_records(blog_post)
|
||||||
|
|
||||||
pager_url = "/blogpost/%s" % blog_post.id
|
pager_url = "/blogpost/%s" % blog_post.id
|
||||||
|
|
||||||
pager = request.website.pager(
|
pager = request.website.pager(
|
||||||
|
|
|
@ -163,13 +163,15 @@ class website_event(http.Controller):
|
||||||
|
|
||||||
@website.route(['/event/<model("event.event"):event>/page/<page:page>'], type='http', auth="public", multilang=True)
|
@website.route(['/event/<model("event.event"):event>/page/<page:page>'], type='http', auth="public", multilang=True)
|
||||||
def event_page(self, event, page, **post):
|
def event_page(self, event, page, **post):
|
||||||
|
website.preload_records(event, on_error="website_event.404")
|
||||||
values = {
|
values = {
|
||||||
'event': event,
|
'event': event,
|
||||||
}
|
}
|
||||||
return request.website.render(page, values)
|
return request.website.render(page, values)
|
||||||
|
|
||||||
@website.route(['/event/<model("event.event"):event>'], type='http', auth="public", multilang=True)
|
@website.route(['/event/<model("event.event"):event>'], type='http', auth="public", multilang=True)
|
||||||
def event(self, event=None, **post):
|
def event(self, event, **post):
|
||||||
|
website.preload_records(event, on_error="website_event.404")
|
||||||
if event.menu_id and event.menu_id.child_id:
|
if event.menu_id and event.menu_id.child_id:
|
||||||
target_url = event.menu_id.child_id[0].url
|
target_url = event.menu_id.child_id[0].url
|
||||||
else:
|
else:
|
||||||
|
@ -179,7 +181,8 @@ class website_event(http.Controller):
|
||||||
return request.redirect(target_url);
|
return request.redirect(target_url);
|
||||||
|
|
||||||
@website.route(['/event/<model("event.event"):event>/register'], type='http', auth="public", multilang=True)
|
@website.route(['/event/<model("event.event"):event>/register'], type='http', auth="public", multilang=True)
|
||||||
def event_register(self, event=None, **post):
|
def event_register(self, event, **post):
|
||||||
|
website.preload_records(event, on_error="website_event.404")
|
||||||
values = {
|
values = {
|
||||||
'event': event,
|
'event': event,
|
||||||
'range': range,
|
'range': range,
|
||||||
|
|
|
@ -243,6 +243,20 @@
|
||||||
</t>
|
</t>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<template id="404">
|
||||||
|
<t t-call="website.layout">
|
||||||
|
<div id="wrap">
|
||||||
|
<div class="oe_structure oe_empty">
|
||||||
|
<div class="container">
|
||||||
|
<h1 class="mt32">Event not found!</h1>
|
||||||
|
<p>Sorry, the requested event is not available anymore.</p>
|
||||||
|
<p><a t-href="/event/">Return to the event list.</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
|
</template>
|
||||||
|
|
||||||
<template id="event_description_full">
|
<template id="event_description_full">
|
||||||
<t t-call="website_event.event_details">
|
<t t-call="website_event.event_details">
|
||||||
<div class="col-md-8">
|
<div class="col-md-8">
|
||||||
|
|
|
@ -243,6 +243,8 @@ class Ecommerce(http.Controller):
|
||||||
|
|
||||||
@website.route(['/shop/product/<model("product.template"):product>/'], type='http', auth="public", multilang=True)
|
@website.route(['/shop/product/<model("product.template"):product>/'], type='http', auth="public", multilang=True)
|
||||||
def product(self, product, search='', category='', filter_domain='', **kwargs):
|
def product(self, product, search='', category='', filter_domain='', **kwargs):
|
||||||
|
website.preload_records(product, on_error="website_sale.404")
|
||||||
|
|
||||||
category_obj = request.registry.get('product.public.category')
|
category_obj = request.registry.get('product.public.category')
|
||||||
|
|
||||||
category_ids = category_obj.search(request.cr, request.uid, [], context=request.context)
|
category_ids = category_obj.search(request.cr, request.uid, [], context=request.context)
|
||||||
|
|
|
@ -227,6 +227,19 @@
|
||||||
|
|
||||||
|
|
||||||
<!-- product -->
|
<!-- product -->
|
||||||
|
<template id="404">
|
||||||
|
<t t-call="website.layout">
|
||||||
|
<div id="wrap">
|
||||||
|
<div class="oe_structure oe_empty">
|
||||||
|
<div class="container">
|
||||||
|
<h1 class="mt32">Product not found!</h1>
|
||||||
|
<p>Sorry, this product is not available anymore.</p>
|
||||||
|
<p><a t-href="/shop/">Return to the product list.</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</t>
|
||||||
|
</template>
|
||||||
|
|
||||||
<template id="product" name="Product">
|
<template id="product" name="Product">
|
||||||
<t t-call="website.layout">
|
<t t-call="website.layout">
|
||||||
|
|
Loading…
Reference in New Issue