def cms_settings(request): """ Adds cms-related variables to the context. """ from menus.menu_pool import MenuRenderer @lru_cache(maxsize=None) def _get_menu_renderer(): # We use lru_cache to avoid getting the manager # every time this function is called. from menus.menu_pool import menu_pool return menu_pool.get_renderer(request) # Now use lazy() to avoid getting the menu renderer # up until the point is needed. # lazy() does not memoize results, is why lru_cache is needed. _get_menu_renderer = lazy(_get_menu_renderer, MenuRenderer) return { 'cms_menu_renderer': _get_menu_renderer(), 'CMS_MEDIA_URL': get_cms_setting('MEDIA_URL'), 'CMS_TEMPLATE': lambda: get_page_template_from_request(request), }
def render_page(request, page, current_language, slug): """ Renders a page """ context = {} context['lang'] = current_language context['current_page'] = page context['has_change_permissions'] = user_can_change_page( request.user, page) context['has_view_permissions'] = user_can_view_page(request.user, page) if not context['has_view_permissions']: return _handle_no_page(request) template = get_page_template_from_request(request) response = TemplateResponse(request, template, context) response.add_post_render_callback(set_page_cache) # Add headers for X Frame Options - this really should be changed upon moving to class based views xframe_options = page.get_xframe_options() # xframe_options can be None if there's no xframe information on the page # (eg. a top-level page which has xframe options set to "inherit") if xframe_options == Page.X_FRAME_OPTIONS_INHERIT or xframe_options is None: # This is when we defer to django's own clickjacking handling return response # We want to prevent django setting this in their middlewear response.xframe_options_exempt = True if xframe_options == Page.X_FRAME_OPTIONS_ALLOW: # Do nothing, allowed is no header. return response elif xframe_options == Page.X_FRAME_OPTIONS_SAMEORIGIN: response['X-Frame-Options'] = 'SAMEORIGIN' elif xframe_options == Page.X_FRAME_OPTIONS_DENY: response['X-Frame-Options'] = 'DENY' return response