[FIX] website: perf - get most specific in SQL
Before this commit, we would get all the pages for the requested URL then
filter to get the most specific.
This can just be done in SQL by sorting website_id desc so the specific are
returned first.
Note that this will respect 41897f0dba.
This will avoid having to prefetch the generic page when it is useless.
Related to #47257
task-2211013
X-original-commit: b31294592a80d9e55f887f0122cc01225b64966c
This commit is contained in:
committed by
Romain Derie
parent
b98d9c968c
commit
89bbf76c44
@@ -237,22 +237,15 @@ class Http(models.AbstractModel):
|
||||
page_domain = [('url', '=', req_page)] + request.website.website_domain()
|
||||
|
||||
published_domain = page_domain
|
||||
# need to bypass website_published, to apply is_most_specific
|
||||
# filter later if not publisher
|
||||
pages = request.env['website.page'].sudo().search(published_domain, order='website_id')
|
||||
pages = pages.filtered(pages._is_most_specific_page)
|
||||
|
||||
if not request.website.is_publisher():
|
||||
pages = pages.filtered('is_visible')
|
||||
|
||||
mypage = pages[0] if pages else False
|
||||
_, ext = os.path.splitext(req_page)
|
||||
if mypage:
|
||||
return request.render(mypage.get_view_identifier(), {
|
||||
# 'path': req_page[1:],
|
||||
# specific page first
|
||||
page = request.env['website.page'].sudo().search(published_domain, order='website_id asc', limit=1)
|
||||
if page and (request.website.is_publisher() or page.is_visible):
|
||||
_, ext = os.path.splitext(req_page)
|
||||
return request.render(page.get_view_identifier(), {
|
||||
'deletable': True,
|
||||
'main_object': mypage,
|
||||
'main_object': page,
|
||||
}, mimetype=_guess_mimetype(ext))
|
||||
return False
|
||||
|
||||
@classmethod
|
||||
def _serve_redirect(cls):
|
||||
|
||||
Reference in New Issue
Block a user