Exemplo n.º 1
0
 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 ''
Exemplo n.º 2
0
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()
Exemplo n.º 3
0
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':''}
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
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()
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
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':''}