def get_footnotes_for_page(request, page): ''' Gets the Footnote instances for `page`, with the correct order. ''' plugins = get_cmsplugin_queryset(request) cache_key = get_cache_key(page, plugins) footnote_ids = cache.get(cache_key) if footnote_ids is None: root_footnote_and_text_plugins = plugins.filter( placeholder__page=page, plugin_type__in=('FootnotePlugin', 'TextPlugin'), parent=None ).order_by('position') footnote_plugins = [] footnote_plugins__append = footnote_plugins.append for p in root_footnote_and_text_plugins: if plugin_is_footnote(p): footnote_plugins__append(p) else: try: text = downcast_plugins((p,))[0] except IndexError: continue plugin_iterator = plugin_iterator_from_text_plugin(text) for plugin in plugin_iterator: if plugin_is_footnote(plugin): footnote_plugins__append(plugin) footnote_ids = tuple(f.pk for f in downcast_plugins(footnote_plugins)) cache.set(cache_key, footnote_ids ) return Footnote.objects.filter(pk__in=footnote_ids)
def get_inherited_snippets(self, placeholder): if not placeholder or not placeholder.page: return [] def can_be_overwritten(plg): return ( plg.__class__ is SmartSnippetPointer and plg.variables.exists() ) page = placeholder.page slot = placeholder.slot pages = chain([page], page.get_cached_ancestors(ascending=True)) for ancestor in pages: placeholder = ancestor.placeholders.filter(slot=slot)[:1] if not placeholder: continue placeholder = placeholder[0] plugins = downcast_plugins(placeholder.get_plugins()) if not plugins: continue return sorted( filter(can_be_overwritten, plugins), key=lambda plg: plg.position, ) return []
def get_inherited_snippets(self, placeholder): if not placeholder or not placeholder.page: return [] def can_be_overwritten(plg): return (plg.__class__ is SmartSnippetPointer and plg.variables.exists()) page = placeholder.page slot = placeholder.slot pages = chain([page], page.get_cached_ancestors(ascending=True)) for ancestor in pages: placeholder = ancestor.placeholders.filter(slot=slot)[:1] if not placeholder: continue placeholder = placeholder[0] plugins = downcast_plugins(placeholder.get_plugins()) if not plugins: continue return sorted( filter(can_be_overwritten, plugins), key=lambda plg: plg.position, ) return []
def _plugin_dict(text, regex=OBJ_ADMIN_RE): plugin_ids = plugin_tags_to_id_list(text, regex) plugin_list = downcast_plugins(CMSPlugin.objects.filter(pk__in=plugin_ids), select_placeholder=True) return dict((plugin.pk, plugin) for plugin in plugin_list)