Exemplo n.º 1
0
def do_extends(parser, token):
    """
    Signal that this template extends a parent template.

    This tag may be used in two ways: ``{% extends "base" %}`` (with quotes)
    uses the literal value "base" as the name of the parent template to extend,
    or ``{% extends variable %}`` uses the value of ``variable`` as either the
    name of the parent template to extend (if it evaluates to a string) or as
    the parent template itself (if it evaluates to a Template object).
    """
    bits = token.split_contents()
    print('bits" ++++++++>', type(bits[1]))
    print('do_extends: ', token)
    if len(bits) != 2:
        raise TemplateSyntaxError("'%s' takes one argument" % bits[0])
    site = Site.objects.get_current()
    bits[1] = '"{0}/{1}"'.format(site.domain, bits[1].strip("'").strip('"'))
    print('parser.origin.template_name: ', parser.origin.template_name)
    bits[1] = construct_relative_path(parser.origin.template_name, bits[1])
    parent_name = parser.compile_filter(bits[1])
    print('parent_name: ----------------------->', type(parent_name),
          parent_name)
    nodelist = parser.parse()
    if nodelist.get_nodes_by_type(ExtendsNode):
        raise TemplateSyntaxError(
            "'%s' cannot appear more than once in the same template" % bits[0])
    print(nodelist, parent_name)
    return ExtendsNode(nodelist, parent_name)
Exemplo n.º 2
0
 def test_extends_node_repr(self):
     extends_node = ExtendsNode(
         nodelist=NodeList([]),
         parent_name=Node(),
         template_dirs=[],
     )
     self.assertEqual(repr(extends_node), "<ExtendsNode: extends None>")
Exemplo n.º 3
0
def pjaxr_extends(parser, token):
    bits = token.split_contents()
    if len(bits) != 4 and len(bits) != 3 and len(bits) != 2:
        raise TemplateSyntaxError("'%s' takes 1 - 3 arguments" % bits[0])

    nodelist = parser.parse()

    if nodelist.get_nodes_by_type(
            PjaxrExtendsNode) or nodelist.get_nodes_by_type(ExtendsNode):
        raise TemplateSyntaxError(
            "'pjaxr_extends' and 'extends' cannot appear more than once in the same template!"
        )

    if len(bits) > 2:
        try:
            # format DEFAULT_PJAXR_TEMPLATE string to fit into FilterExpression as token
            pjaxr_template = parser.compile_filter(
                bits[3]) if (len(bits) == 4) else FilterExpression(
                    "'{0}'".format(settings.DEFAULT_PJAXR_TEMPLATE), parser)
        except AttributeError:
            raise TemplateSyntaxError(
                "No Pjaxr template set, even no default!")
        return PjaxrExtendsNode(nodelist, parser.compile_filter(bits[1]),
                                parser.compile_filter(bits[2]), pjaxr_template)
    return ExtendsNode(nodelist, parser.compile_filter(bits[1]))
Exemplo n.º 4
0
 def __init__(self, nodelist, template_name):
     self.delegate = ExtendsNode(nodelist, template_name, None)
Exemplo n.º 5
0
 def __init__(self, nodelist, parent_name, parent_name_expr, template_dirs=None):
   self.impl = ExtendsNode(nodelist, parent_name, parent_name_expr,
                             template_dirs)