def render(self, context): if not 'request' in context or not self.page in context: return '' language = get_language_from_request(context['request']) request = context['request'] content = Content.objects.get_content(context[self.page], language, self.name, True) if not content: return '' if self.parsed: try: t = template.Template(content, name=self.name) content = mark_safe(t.render(context)) except template.TemplateSyntaxError, error: if global_settings.DEBUG: error = PLACEHOLDER_ERROR % { 'name': self.name, 'error': error, } if self.as_varname is None: return error context[self.as_varname] = error return '' else: return ''
def show_menu(context, page, url='/'): """render a nested list of all children of the pages""" request = context['request'] site = request.site children = get_page_children_for_site(page, site) PAGE_CONTENT_CACHE_DURATION = settings.PAGE_CONTENT_CACHE_DURATION lang = get_language_from_request(request) if 'current_page' in context: current_page = context['current_page'] return locals()
def show_absolute_url(context, page, lang=None): """Show the url of a page in the right language""" request = context.get('request', False) if not request or not page: return {'content':''} if lang is None: lang = get_language_from_request(context['request']) if hasattr(settings, 'PAGE_CONTENT_CACHE_DURATION'): key = 'page_url_pid:'+str(page.id)+'_l:'+str(lang)+'_type:absolute_url' url = cache.get(key) if not url: url = page.get_absolute_url(language=lang) cache.set(key, url, settings.PAGE_CONTENT_CACHE_DURATION) else: url = page.get_absolute_url(language=lang) if url: return {'content':url} return {'content':''}
def change_view(self, request, object_id, extra_context=None): """ The 'change' admin view for the Page model. """ try: obj = self.model.objects.get(pk=object_id) except self.model.DoesNotExist: # Don't raise Http404 just yet, because we haven't checked # permissions yet. We don't want an unauthenticated user to be able # to determine whether a given object exists. obj = None else: template = get_template_from_request(request, obj) extra_context = { 'placeholders': get_placeholders(request, template), 'language': get_language_from_request(request), 'traduction_language': settings.PAGE_LANGUAGES, 'page': obj, } return super(PageAdmin, self).change_view(request, object_id, extra_context)
def details(request, page_id=None, slug=None, template_name=settings.DEFAULT_PAGE_TEMPLATE): lang = get_language_from_request(request) site = request.site pages = Page.objects.root(site).order_by("tree_id") if pages: if page_id: current_page = get_object_or_404(Page.objects.published(site), pk=page_id) elif slug: slug_content = Content.objects.get_page_slug(slug, site) if slug_content and \ slug_content.page.calculated_status == Page.PUBLISHED: current_page = slug_content.page else: raise Http404 else: current_page = pages[0] template_name = current_page.get_template() else: current_page = None return template_name, locals()
def get_form(self, request, obj=None, **kwargs): """ Get PageForm for the Page model and modify its fields depending on the request. """ form = super(PageAdmin, self).get_form(request, obj, **kwargs) language = get_language_from_request(request, obj) form.base_fields['language'].initial = force_unicode(language) if obj: initial_slug = obj.slug(language=language, fallback=False) initial_title = obj.title(language=language, fallback=False) form.base_fields['slug'].initial = initial_slug form.base_fields['title'].initial = initial_title template = get_template_from_request(request, obj) if settings.PAGE_TEMPLATES: template_choices = list(settings.PAGE_TEMPLATES) template_choices.insert(0, (settings.DEFAULT_PAGE_TEMPLATE, _('Default template'))) form.base_fields['template'].choices = template_choices form.base_fields['template'].initial = force_unicode(template) for placeholder in get_placeholders(request, template): widget = self.get_widget(request, placeholder.widget)() if placeholder.parsed: help_text = _('Note: This field is evaluated as template code, within the current context.') else: help_text = "" name = placeholder.name if obj: initial = Content.objects.get_content(obj, language, name) else: initial = None if name not in self.mandatory_placeholders: form.base_fields[placeholder.name] = CharField(widget=widget, initial=initial, help_text=help_text, required=False) else: form.base_fields[name].initial = initial form.base_fields[name].help_text = help_text return form
def show_content(context, page, content_type, lang=None): """Display a content type from a page. eg: {% show_content page_object "title" %} You can also use the slug of a page eg: {% show_content "my-page-slug" "title" %} Keyword arguments: page -- the page object args -- content_type used by a placeholder lang -- the wanted language (default None, use the request object to know) """ request = context.get('request', False) if not request or not page: return {'content':''} # if the page is a SafeUnicode, try to use it like a slug if isinstance(page, SafeUnicode): c = Content.objects.filter(type='slug', body=page) if len(c): page = c[0].page else: return {'content':''} if lang is None: lang = get_language_from_request(context['request']) if hasattr(settings, 'PAGE_CONTENT_CACHE_DURATION'): key = 'content_cache_pid:'+str(page.id)+'_l:'+str(lang)+'_type:'+str(content_type) c = cache.get(key) if not c: c = Content.objects.get_content(page, lang, content_type, True) cache.set(key, c, settings.PAGE_CONTENT_CACHE_DURATION) else: c = Content.objects.get_content(page, lang, content_type, True) if c: return {'content':c} return {'content':''}