Fixed a confusing edge case (thanks apollo13)
authorArmin Ronacher <armin.ronacher@active-4.com>
Mon, 15 Sep 2008 12:35:01 +0000 (14:35 +0200)
committerArmin Ronacher <armin.ronacher@active-4.com>
Mon, 15 Sep 2008 12:35:01 +0000 (14:35 +0200)
--HG--
branch : trunk

CHANGES
jinja2/compiler.py
jinja2/ext.py

diff --git a/CHANGES b/CHANGES
index eb730f120e1ee49f426c6796fdfa83a66e98bb62..14ee198e869164d81e581e2c075ed84719bb8b6b 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -18,6 +18,14 @@ Version 2.1
   undefined object now instead of raising an index error.  This was a bug
   caused by eager optimizing.
 
+- the i18n extension looks up `foo.ugettext` now followed by `foo.gettext`
+  if an translations object is installed.  This makes dealing with custom
+  translations classes easier.
+
+- fixed a confusing behavior with conditional extending.  loops were partially
+  executed under some conditions even though they were not part of a visible
+  area.
+
 Version 2.0
 -----------
 (codename jinjavitus, released on July 17th 2008)
index 6bd9428b6deee626087a52ef6d72f4f325ee6eec..c63044ab0833e578358c46c44eb22459c7e2b814 100644 (file)
@@ -1051,7 +1051,7 @@ class CodeGenerator(NodeVisitor):
 
     def visit_Output(self, node, frame):
         # if we have a known extends statement, we don't output anything
-        if self.has_known_extends and frame.toplevel:
+        if self.has_known_extends and frame.block is None:
             return
 
         if self.environment.finalize:
@@ -1061,11 +1061,11 @@ class CodeGenerator(NodeVisitor):
 
         self.newline(node)
 
-        # if we are in the toplevel scope and there was already an extends
+        # if we are not in a block and there was already an extends
         # statement we have to add a check that disables our yield(s) here
         # so that they don't appear in the output.
         outdent_later = False
-        if frame.toplevel and self.extends_so_far != 0:
+        if frame.block is None and self.extends_so_far != 0:
             self.writeline('if parent_template is None:')
             self.indent()
             outdent_later = True
index e140fbceccc62022bc54fc3757373b513166dd7a..a666d77d2329c0c6c8a9e914f18d8caaf1db041a 100644 (file)
@@ -142,10 +142,13 @@ class InternationalizationExtension(Extension):
         )
 
     def _install(self, translations):
-        self.environment.globals.update(
-            gettext=translations.ugettext,
-            ngettext=translations.ungettext
-        )
+        gettext = getattr(translations, 'ugettext', None)
+        if gettext is None:
+            gettext = translations.gettext
+        ngettext = getattr(translations, 'ungettext', None)
+        if ngettext is None:
+            ngettext = translations.ngettext
+        self.environment.globals.update(gettext=gettext, ngettext=ngettext)
 
     def _install_null(self):
         self.environment.globals.update(