[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):
|
||||
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):
|
||||
def _get_menu_website(self, cr, uid, ids, context=None):
|
||||
# IF a menu is changed, update all websites
|
||||
|
|
|
@ -97,6 +97,7 @@ class WebsiteBlog(http.Controller):
|
|||
"""
|
||||
BYPAGE = 10
|
||||
|
||||
website.preload_records(category, tag)
|
||||
cr, uid, context = request.cr, request.uid, request.context
|
||||
blog_post_obj = request.registry['blog.post']
|
||||
|
||||
|
@ -178,6 +179,8 @@ class WebsiteBlog(http.Controller):
|
|||
- 'nav_list': a dict [year][month] for archives navigation
|
||||
"""
|
||||
|
||||
website.preload_records(blog_post)
|
||||
|
||||
pager_url = "/blogpost/%s" % blog_post.id
|
||||
|
||||
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)
|
||||
def event_page(self, event, page, **post):
|
||||
website.preload_records(event, on_error="website_event.404")
|
||||
values = {
|
||||
'event': event,
|
||||
}
|
||||
return request.website.render(page, values)
|
||||
|
||||
@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:
|
||||
target_url = event.menu_id.child_id[0].url
|
||||
else:
|
||||
|
@ -179,7 +181,8 @@ class website_event(http.Controller):
|
|||
return request.redirect(target_url);
|
||||
|
||||
@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 = {
|
||||
'event': event,
|
||||
'range': range,
|
||||
|
|
|
@ -243,6 +243,20 @@
|
|||
</t>
|
||||
</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">
|
||||
<t t-call="website_event.event_details">
|
||||
<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)
|
||||
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_ids = category_obj.search(request.cr, request.uid, [], context=request.context)
|
||||
|
|
|
@ -227,6 +227,19 @@
|
|||
|
||||
|
||||
<!-- 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">
|
||||
<t t-call="website.layout">
|
||||
|
|
Loading…
Reference in New Issue