Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

# Copyright 2012-2015 Luc Saffre 

# License: BSD (see file COPYING for details) 

 

"""Defines a Loader which is automatically installed to 

`TEMPLATE_LOADERS` by :mod:`lino.core.site` 

 

""" 

 

from __future__ import unicode_literals 

from __future__ import print_function 

from builtins import object 

 

import logging 

logger = logging.getLogger(__name__) 

 

from jinja2.exceptions import TemplateNotFound 

 

 

from django.conf import settings 

# from django.utils.translation import ugettext_lazy as _ 

from django.template.loaders.base import Loader as BaseLoader 

 

from django.template import TemplateDoesNotExist 

 

from lino.core import requests 

 

 

class DjangoJinjaTemplate(object): 

 

    """ 

    used e.g. to render :srcref:`/lino/lino/config/500.html` 

    """ 

 

    def __init__(self, jt): 

        self.jt = jt 

 

    def render(self, context): 

        # flatten the Django Context into a single dictionary. 

        #~ logger.info("20130118 %s",context) 

        context_dict = {} 

        for d in context.dicts: 

            context_dict.update(d) 

        # extend_context(context_dict) 

        ar = requests.BaseRequest( 

            renderer=settings.SITE.plugins.jinja.renderer) 

            # renderer=settings.SITE.kernel.default_renderer) 

        context_dict = ar.get_printable_context(**context_dict) 

        context_dict.setdefault('request', None) 

        #context_dict.setdefault('ar', ar) 

        #~ logger.info("20130118 %s",context_dict.keys()) 

        return self.jt.render(context_dict) 

 

 

class Loader(BaseLoader): 

 

    is_usable = True 

 

    def load_template(self, template_name, template_dirs=None): 

        #~ source, origin = self.load_template_source(template_name, template_dirs) 

        env = settings.SITE.plugins.jinja.renderer.jinja_env 

 

        try: 

            jt = env.get_template(template_name) 

        except TemplateNotFound: 

            raise TemplateDoesNotExist(template_name) 

        template = DjangoJinjaTemplate(jt) 

        return template, None