Loading AUTHORS +1 −0 Original line number Diff line number Diff line Loading @@ -539,6 +539,7 @@ answer newbie questions, and generally made Django that much better: Brenton Simpson <http://theillustratedlife.com> Jozko Skrablin <jozko.skrablin@gmail.com> Ben Slavin <benjamin.slavin@gmail.com> Jonathan Slenders sloonz <simon.lipp@insa-lyon.fr> Paul Smith <blinkylights23@gmail.com> Steven L. Smith (fvox13) <steven@stevenlsmith.com> Loading django/template/defaulttags.py +28 −7 Original line number Diff line number Diff line Loading @@ -458,10 +458,11 @@ class VerbatimNode(Node): return self.content class WidthRatioNode(Node): def __init__(self, val_expr, max_expr, max_width): def __init__(self, val_expr, max_expr, max_width, asvar=None): self.val_expr = val_expr self.max_expr = max_expr self.max_width = max_width self.asvar = asvar def render(self, context): try: Loading @@ -480,7 +481,13 @@ class WidthRatioNode(Node): return '0' except (ValueError, TypeError): return '' return str(int(round(ratio))) result = str(int(round(ratio))) if self.asvar: context[self.asvar] = result return '' else: return result class WithNode(Node): def __init__(self, var, name, nodelist, extra_context=None): Loading Loading @@ -1353,20 +1360,34 @@ def widthratio(parser, token): For example:: <img src='bar.gif' height='10' width='{% widthratio this_value max_value max_width %}' /> <img src="bar.png" alt="Bar" height="10" width="{% widthratio this_value max_value max_width %}" /> If ``this_value`` is 175, ``max_value`` is 200, and ``max_width`` is 100, the image in the above example will be 88 pixels wide (because 175/200 = .875; .875 * 100 = 87.5 which is rounded up to 88). In some cases you might want to capture the result of widthratio in a variable. It can be useful for instance in a blocktrans like this:: {% widthratio this_value max_value max_width as width %} {% blocktrans %}The width is: {{ width }}{% endblocktrans %} """ bits = token.split_contents() if len(bits) != 4: raise TemplateSyntaxError("widthratio takes three arguments") if len(bits) == 4: tag, this_value_expr, max_value_expr, max_width = bits asvar = None elif len(bits) == 6: tag, this_value_expr, max_value_expr, max_width, as_, asvar = bits if as_ != 'as': raise TemplateSyntaxError("Invalid syntax in widthratio tag. Expecting 'as' keyword") else: raise TemplateSyntaxError("widthratio takes at least three arguments") return WidthRatioNode(parser.compile_filter(this_value_expr), parser.compile_filter(max_value_expr), parser.compile_filter(max_width)) parser.compile_filter(max_width), asvar=asvar) @register.tag('with') def do_with(parser, token): Loading docs/ref/templates/builtins.txt +8 −0 Original line number Diff line number Diff line Loading @@ -1108,6 +1108,14 @@ If ``this_value`` is 175, ``max_value`` is 200, and ``max_width`` is 100, the image in the above example will be 88 pixels wide (because 175/200 = .875; .875 * 100 = 87.5 which is rounded up to 88). .. versionchanged:: 1.7 In some cases you might want to capture the result of ``widthratio`` in a variable. It can be useful, for instance, in a :ttag:`blocktrans` like this:: {% widthratio this_value max_value max_width as width %} {% blocktrans %}The width is: {{ width }}{% endblocktrans %} .. templatetag:: with with Loading docs/releases/1.7.txt +3 −0 Original line number Diff line number Diff line Loading @@ -156,6 +156,9 @@ Minor features :meth:`~django.contrib.auth.models.User.email_user()` are passed to the underlying :meth:`~django.core.mail.send_mail()` call. * The :ttag:`widthratio` template tag now accepts an "as" parameter to capture the result in a variable. Backwards incompatible changes in 1.7 ===================================== Loading tests/template_tests/tests.py +7 −0 Original line number Diff line number Diff line Loading @@ -1575,6 +1575,13 @@ class TemplateTests(TransRealMixin, TestCase): # Test whitespace in filter argument 'widthratio15': ('{% load custom %}{% widthratio a|noop:"x y" b 0 %}', {'a':50,'b':100}, '0'), # Widthratio with variable assignment 'widthratio16': ('{% widthratio a b 100 as variable %}-{{ variable }}-', {'a':50,'b':100}, '-50-'), 'widthratio17': ('{% widthratio a b 100 as variable %}-{{ variable }}-', {'a':100,'b':100}, '-100-'), 'widthratio18': ('{% widthratio a b 100 as %}', { }, template.TemplateSyntaxError), 'widthratio19': ('{% widthratio a b 100 not_as variable %}', { }, template.TemplateSyntaxError), ### WITH TAG ######################################################## 'with01': ('{% with key=dict.key %}{{ key }}{% endwith %}', {'dict': {'key': 50}}, '50'), 'legacywith01': ('{% with dict.key as key %}{{ key }}{% endwith %}', {'dict': {'key': 50}}, '50'), Loading Loading
AUTHORS +1 −0 Original line number Diff line number Diff line Loading @@ -539,6 +539,7 @@ answer newbie questions, and generally made Django that much better: Brenton Simpson <http://theillustratedlife.com> Jozko Skrablin <jozko.skrablin@gmail.com> Ben Slavin <benjamin.slavin@gmail.com> Jonathan Slenders sloonz <simon.lipp@insa-lyon.fr> Paul Smith <blinkylights23@gmail.com> Steven L. Smith (fvox13) <steven@stevenlsmith.com> Loading
django/template/defaulttags.py +28 −7 Original line number Diff line number Diff line Loading @@ -458,10 +458,11 @@ class VerbatimNode(Node): return self.content class WidthRatioNode(Node): def __init__(self, val_expr, max_expr, max_width): def __init__(self, val_expr, max_expr, max_width, asvar=None): self.val_expr = val_expr self.max_expr = max_expr self.max_width = max_width self.asvar = asvar def render(self, context): try: Loading @@ -480,7 +481,13 @@ class WidthRatioNode(Node): return '0' except (ValueError, TypeError): return '' return str(int(round(ratio))) result = str(int(round(ratio))) if self.asvar: context[self.asvar] = result return '' else: return result class WithNode(Node): def __init__(self, var, name, nodelist, extra_context=None): Loading Loading @@ -1353,20 +1360,34 @@ def widthratio(parser, token): For example:: <img src='bar.gif' height='10' width='{% widthratio this_value max_value max_width %}' /> <img src="bar.png" alt="Bar" height="10" width="{% widthratio this_value max_value max_width %}" /> If ``this_value`` is 175, ``max_value`` is 200, and ``max_width`` is 100, the image in the above example will be 88 pixels wide (because 175/200 = .875; .875 * 100 = 87.5 which is rounded up to 88). In some cases you might want to capture the result of widthratio in a variable. It can be useful for instance in a blocktrans like this:: {% widthratio this_value max_value max_width as width %} {% blocktrans %}The width is: {{ width }}{% endblocktrans %} """ bits = token.split_contents() if len(bits) != 4: raise TemplateSyntaxError("widthratio takes three arguments") if len(bits) == 4: tag, this_value_expr, max_value_expr, max_width = bits asvar = None elif len(bits) == 6: tag, this_value_expr, max_value_expr, max_width, as_, asvar = bits if as_ != 'as': raise TemplateSyntaxError("Invalid syntax in widthratio tag. Expecting 'as' keyword") else: raise TemplateSyntaxError("widthratio takes at least three arguments") return WidthRatioNode(parser.compile_filter(this_value_expr), parser.compile_filter(max_value_expr), parser.compile_filter(max_width)) parser.compile_filter(max_width), asvar=asvar) @register.tag('with') def do_with(parser, token): Loading
docs/ref/templates/builtins.txt +8 −0 Original line number Diff line number Diff line Loading @@ -1108,6 +1108,14 @@ If ``this_value`` is 175, ``max_value`` is 200, and ``max_width`` is 100, the image in the above example will be 88 pixels wide (because 175/200 = .875; .875 * 100 = 87.5 which is rounded up to 88). .. versionchanged:: 1.7 In some cases you might want to capture the result of ``widthratio`` in a variable. It can be useful, for instance, in a :ttag:`blocktrans` like this:: {% widthratio this_value max_value max_width as width %} {% blocktrans %}The width is: {{ width }}{% endblocktrans %} .. templatetag:: with with Loading
docs/releases/1.7.txt +3 −0 Original line number Diff line number Diff line Loading @@ -156,6 +156,9 @@ Minor features :meth:`~django.contrib.auth.models.User.email_user()` are passed to the underlying :meth:`~django.core.mail.send_mail()` call. * The :ttag:`widthratio` template tag now accepts an "as" parameter to capture the result in a variable. Backwards incompatible changes in 1.7 ===================================== Loading
tests/template_tests/tests.py +7 −0 Original line number Diff line number Diff line Loading @@ -1575,6 +1575,13 @@ class TemplateTests(TransRealMixin, TestCase): # Test whitespace in filter argument 'widthratio15': ('{% load custom %}{% widthratio a|noop:"x y" b 0 %}', {'a':50,'b':100}, '0'), # Widthratio with variable assignment 'widthratio16': ('{% widthratio a b 100 as variable %}-{{ variable }}-', {'a':50,'b':100}, '-50-'), 'widthratio17': ('{% widthratio a b 100 as variable %}-{{ variable }}-', {'a':100,'b':100}, '-100-'), 'widthratio18': ('{% widthratio a b 100 as %}', { }, template.TemplateSyntaxError), 'widthratio19': ('{% widthratio a b 100 not_as variable %}', { }, template.TemplateSyntaxError), ### WITH TAG ######################################################## 'with01': ('{% with key=dict.key %}{{ key }}{% endwith %}', {'dict': {'key': 50}}, '50'), 'legacywith01': ('{% with dict.key as key %}{{ key }}{% endwith %}', {'dict': {'key': 50}}, '50'), Loading