Kaydet (Commit) 847b1ed5 authored tarafından Jacob Kaplan-Moss's avatar Jacob Kaplan-Moss

Fixed #1650: the {% extends %} tag now can extend a Template object passed into…

Fixed #1650: the {% extends %} tag now can extend a Template object passed into the context.  Thanks, clelland@gmail.com.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@3465 bcc190cf-cafb-0310-a4f2-bffc1f526a37
üst 6537401c
...@@ -50,6 +50,8 @@ class ExtendsNode(Node): ...@@ -50,6 +50,8 @@ class ExtendsNode(Node):
if self.parent_name_expr: if self.parent_name_expr:
error_msg += " Got this from the %r variable." % self.parent_name_expr #TODO nice repr. error_msg += " Got this from the %r variable." % self.parent_name_expr #TODO nice repr.
raise TemplateSyntaxError, error_msg raise TemplateSyntaxError, error_msg
if hasattr(parent, 'render'):
return parent
try: try:
source, origin = find_template_source(parent, self.template_dirs) source, origin = find_template_source(parent, self.template_dirs)
except TemplateDoesNotExist: except TemplateDoesNotExist:
...@@ -137,8 +139,9 @@ def do_extends(parser, token): ...@@ -137,8 +139,9 @@ def do_extends(parser, token):
This tag may be used in two ways: ``{% extends "base" %}`` (with quotes) 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, uses the literal value "base" as the name of the parent template to extend,
or ``{% extends variable %}`` uses the value of ``variable`` as the name or ``{% extends variable %}`` uses the value of ``variable`` as either the
of the parent template to extend. name of the parent template to extend (if it evaluates to a string,) or as
the parent tempate itelf (if it evaluates to a Template object).
""" """
bits = token.contents.split() bits = token.contents.split()
if len(bits) != 2: if len(bits) != 2:
......
...@@ -363,10 +363,14 @@ extends ...@@ -363,10 +363,14 @@ extends
Signal that this template extends a parent template. Signal that this template extends a parent template.
This tag may be used in two ways: ``{% extends "base.html" %}`` (with quotes) This tag may be used in two ways:
uses the literal value "base.html" as the name of the parent template to
extend, or ``{% extends variable %}`` uses the value of ``variable`` as the * ``{% extends "base.html" %}`` (with quotes) uses the literal value
name of the parent template to extend. "base.html" as the name of the parent template to extend
* ``{% 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 tempate itelf (if it evaluates to a Template object).
See `Template inheritance`_ for more information. See `Template inheritance`_ for more information.
......
...@@ -410,6 +410,12 @@ TEMPLATE_TESTS = { ...@@ -410,6 +410,12 @@ TEMPLATE_TESTS = {
# Three-level inheritance with {{ block.super }} from parent and grandparent # Three-level inheritance with {{ block.super }} from parent and grandparent
'inheritance23': ("{% extends 'inheritance20' %}{% block first %}{{ block.super }}b{% endblock %}", {}, '1_ab3_'), 'inheritance23': ("{% extends 'inheritance20' %}{% block first %}{{ block.super }}b{% endblock %}", {}, '1_ab3_'),
# Inheritance from local context without use of template loader
'inheritance24': ("{% extends context_template %}{% block first %}2{% endblock %}{% block second %}4{% endblock %}", {'context_template': template.Template("1{% block first %}_{% endblock %}3{% block second %}_{% endblock %}")}, '1234'),
# Inheritance from local context with variable parent template
'inheritance25': ("{% extends context_template.1 %}{% block first %}2{% endblock %}{% block second %}4{% endblock %}", {'context_template': [template.Template("Wrong"), template.Template("1{% block first %}_{% endblock %}3{% block second %}_{% endblock %}")]}, '1234'),
### I18N ################################################################## ### I18N ##################################################################
# {% spaceless %} tag # {% spaceless %} tag
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment