django_adapter.py :  » Template-Engines » Breve » cwells-breve-5ff90a9 » breve » plugin » Python Open Source

Home
Python Open Source
1.3.1.2 Python
2.Ajax
3.Aspect Oriented
4.Blog
5.Build
6.Business Application
7.Chart Report
8.Content Management Systems
9.Cryptographic
10.Database
11.Development
12.Editor
13.Email
14.ERP
15.Game 2D 3D
16.GIS
17.GUI
18.IDE
19.Installer
20.IRC
21.Issue Tracker
22.Language Interface
23.Log
24.Math
25.Media Sound Audio
26.Mobile
27.Network
28.Parser
29.PDF
30.Project Management
31.RSS
32.Search
33.Security
34.Template Engines
35.Test
36.UML
37.USB Serial
38.Web Frameworks
39.Web Server
40.Web Services
41.Web Unit
42.Wiki
43.Windows
44.XML
Python Open Source » Template Engines » Breve 
Breve » cwells breve 5ff90a9 » breve » plugin » django_adapter.py
import os
from breve import Template
from breve.tags import html
from django.http import HttpResponse
from django.template import Context,TemplateDoesNotExist
from django.utils.translation import gettext_lazy

from django.conf import settings
BREVE_ROOT = settings.BREVE_ROOT

try:
    BREVE_OPTS = settings.BREVE_OPTS
except AttributeError:
    BREVE_OPTS = {}

def flatten_string ( obj ):
    return unicode ( obj ).encode ( settings.DEFAULT_CHARSET )

class _loader ( object ):
    def __init__ ( self, root, breve_opts = None ):
        self.breve_opts = breve_opts or { }
        self.root = root

    def get_template ( self, template ):
        return TemplateAdapter ( [ template ], root = self.root,
                                 breve_opts = self.breve_opts )

    def select_template ( self, template_list ):
        return TemplateAdapter ( template_list, root = self.root,
                                 breve_opts = self.breve_opts )

class TemplateAdapter ( object ):
    """
    Takes the root and a list of filenames of a breve templates in the
    constructor and returns an object that behaves as a
    django.templates.Template in the sense that the render (vars)
    method returns the rendered string. It tries the filenames in
    order and the first one for which a corresponding file exists is
    used. If none of the filenames matches, render raises
    django.template.TemplateDoesNotExist.
    """
    def __init__ ( self, names, root = BREVE_ROOT, breve_opts = { } ):
        self.template = Template ( tags = html.tags, root = root, **breve_opts )
        self.names = names
        self.breve_opts = breve_opts

    def render ( self, vars = None ):
        import os
        if vars == None:
            vars = { }
        elif isinstance ( vars, Context ):
            result = { }
            for d in [ d for d in vars ].__reversed__ ( ):
                result.update ( d )
            vars = result
        for name in self.names:
            try:                
                return flatten_string (
                    self.template.render (
                        template = name, vars = vars,
                        **self.breve_opts )
                )
            except OSError:
                pass
        if len ( self.names ) == 0:
            raise TemplateDoesNotExist ( _( "No templates given." ) )
        elif len ( self.names ) == 1:
            raise TemplateDoesNotExist (
                _( "The template %s does not exist." ) %
                os.path.join ( self.template.root, self.names [ 0 ] ) )
        else:
            raise TemplateDoesNotExist ( _( "None of the following templates exists: %s." ) %
                                         ", ".join ( [ os.path.join (self.template.root, name )
                                                       for name in self.names ] ) )


loader = _loader ( root = BREVE_ROOT, breve_opts = BREVE_OPTS )

def render_to_response(template, vars=None, **kwargs):
    t = loader.get_template(template)
    return HttpResponse(t.render(vars), **kwargs)

def render_to_string ( template, vars = None ):
    t = loader.get_template ( template )
    return flatten_string ( t.render ( vars ) )
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.