perfs: refactor get_badges (#21052)

This commit is contained in:
Frédéric Péters 2018-01-18 08:50:21 +01:00
parent 9d1f38e645
commit e82f701ffa
1 changed files with 14 additions and 7 deletions

View File

@ -133,6 +133,15 @@ def extend_with_parent_cells(cells):
cells[idx:idx+1] = cell.get_cells()
def should_check_badges():
check_badges = False
for klass in CellBase.get_cell_classes(lambda x: bool(x.get_badge)):
check_badges = klass.objects.all().exists()
if check_badges:
break
return check_badges
def skeleton(request):
# Skeleton rendering is used to dynamically produce base templates to use
# in other applications, based on configured combo cells.
@ -217,14 +226,13 @@ def skeleton(request):
combo_template = settings.COMBO_PUBLIC_TEMPLATES[selected_page.template_name]
extend_with_parent_cells(cells)
cell_with_badges = CellBase.get_cells(cell_filter=lambda x: bool(x.get_badge))
ctx = {
'page': selected_page,
'page_cells': cells,
'pages': pages,
'request': request,
'render_skeleton': True,
'check_badges': bool(cell_with_badges),
'check_badges': should_check_badges(),
'site_base': request.build_absolute_uri('/')[:-1],
}
@ -351,10 +359,9 @@ def publish_page(request, page, status=200, template_name=None):
cells = CellBase.get_cells(page_id=page.id)
extend_with_parent_cells(cells)
cells = [x for x in cells if x.is_visible(user=request.user)]
cell_with_badges = CellBase.get_cells(cell_filter=lambda x: bool(x.get_badge))
ctx = {
'check_badges': bool(cell_with_badges),
'check_badges': should_check_badges(),
'page': page,
'page_cells': cells,
'pages': pages,
@ -385,9 +392,9 @@ def error404(request, *args, **kwargs):
def menu_badges(request):
context = {'request': request}
page_ids = request.GET.getlist('page[]')
cells = CellBase.get_cells(
cell_filter=lambda x: bool(x.get_badge),
page_id__in=page_ids)
cells = []
for klass in CellBase.get_cell_classes(lambda x: bool(x.get_badge)):
cells.extend(klass.objects.filter(page_id__in=page_ids))
badges = {}
for cell in cells:
if cell.page_id in badges: