13
13
from django .utils .translation import override
14
14
15
15
from cms .cache .placeholder import get_placeholder_cache , set_placeholder_cache
16
- from cms .models import PageContent
16
+ from cms .models import PageContent , Placeholder
17
17
from cms .toolbar .utils import (
18
18
get_placeholder_toolbar_js ,
19
19
get_plugin_toolbar_js ,
@@ -554,6 +554,28 @@ def _get_cached_placeholder_content(self, placeholder, language):
554
554
language_cache [placeholder .pk ] = cached_value
555
555
return language_cache .get (placeholder .pk )
556
556
557
+
558
+ def _get_content_object (self , page , slots = None ):
559
+ if self .toolbar .get_object () == page :
560
+ # Current object belongs to the page itself
561
+ page_content = self .toolbar .get_object ()
562
+ placeholders = Placeholder .objects .get_for_obj (page_content )
563
+ elif slots :
564
+ # If looking for inherited placeholders, slots is specified
565
+ if self .toolbar .preview_mode_active or self .toolbar .edit_mode_active :
566
+ page_content = (page .pagecontent_set (manager = "admin_manager" )
567
+ .current_content (language = self .request_language ).first ())
568
+ else :
569
+ page_content = page .pagecontent_set .filter (language = self .request_language ).first ()
570
+ placeholders = Placeholder .objects .get_for_obj (page_content ) if page_content else Placeholder .objects .none ()
571
+ else :
572
+ page_content = page .get_content_obj (self .request_language , fallback = False )
573
+
574
+ PageContent .page .field .set_cached_value (page_content , page )
575
+ # Creates any placeholders missing on the page
576
+ placeholders = page_content .rescan_placeholders ().values ()
577
+ return placeholders
578
+
557
579
def _preload_placeholders_for_page (self , page , slots = None , inherit = False ):
558
580
"""
559
581
Populates the internal plugin cache of each placeholder
@@ -562,14 +584,7 @@ def _preload_placeholders_for_page(self, page, slots=None, inherit=False):
562
584
"""
563
585
from cms .utils .plugins import assign_plugins
564
586
565
- if slots :
566
- placeholders = page .get_placeholders (self .request_language ).filter (slot__in = slots )
567
- else :
568
- title = page .get_content_obj (self .request_language , fallback = False )
569
-
570
- PageContent .page .field .set_cached_value (title , page )
571
- # Creates any placeholders missing on the page
572
- placeholders = title .rescan_placeholders ().values ()
587
+ placeholders = self ._get_content_object (page , slots = slots )
573
588
574
589
if inherit :
575
590
# When the inherit flag is True,
0 commit comments