Don't crash if there is a key error in a template. Bug 556814
This commit is contained in:
parent
69349e2662
commit
c73d2c5518
BIN
examples/jingo-project/locale/xx/LC_MESSAGES/messages.mo
Normal file
BIN
examples/jingo-project/locale/xx/LC_MESSAGES/messages.mo
Normal file
Binary file not shown.
4
examples/jingo-project/locale/xx/LC_MESSAGES/messages.po
Normal file
4
examples/jingo-project/locale/xx/LC_MESSAGES/messages.po
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
#, python-format
|
||||||
|
msgid "Broken %(string)s"
|
||||||
|
msgstr "Broken %(fuuu)s"
|
||||||
|
|
@ -1 +1,7 @@
|
|||||||
|
import os
|
||||||
|
|
||||||
|
# Make filepaths relative to settings.
|
||||||
|
ROOT = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
path = lambda *a: os.path.join(ROOT, *a)
|
||||||
|
|
||||||
JINJA_CONFIG = {}
|
JINJA_CONFIG = {}
|
||||||
|
3
fabfile.py
vendored
3
fabfile.py
vendored
@ -26,11 +26,12 @@ def doc(kind='html'):
|
|||||||
with cd('docs'):
|
with cd('docs'):
|
||||||
local('make clean %s' % kind)
|
local('make clean %s' % kind)
|
||||||
|
|
||||||
|
def shell():
|
||||||
|
local('django-admin.py shell')
|
||||||
|
|
||||||
def test():
|
def test():
|
||||||
local('nosetests')
|
local('nosetests')
|
||||||
|
|
||||||
|
|
||||||
def updoc():
|
def updoc():
|
||||||
doc('dirhtml')
|
doc('dirhtml')
|
||||||
rsync_project('p/%s' % NAME, 'docs/_build/dirhtml/', delete=True)
|
rsync_project('p/%s' % NAME, 'docs/_build/dirhtml/', delete=True)
|
||||||
|
@ -4,8 +4,10 @@ import functools
|
|||||||
from django import http
|
from django import http
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.template.context import get_standard_processors
|
from django.template.context import get_standard_processors
|
||||||
|
from django.utils.translation import trans_real
|
||||||
|
|
||||||
import jinja2
|
import jinja2
|
||||||
|
import tower
|
||||||
|
|
||||||
VERSION = (0, 3)
|
VERSION = (0, 3)
|
||||||
__version__ = '.'.join(map(str, VERSION))
|
__version__ = '.'.join(map(str, VERSION))
|
||||||
@ -74,7 +76,14 @@ def render_to_string(request, template, context=None):
|
|||||||
# If it's not a Template, it must be a path to be loaded.
|
# If it's not a Template, it must be a path to be loaded.
|
||||||
if not isinstance(template, jinja2.environment.Template):
|
if not isinstance(template, jinja2.environment.Template):
|
||||||
template = env.get_template(template)
|
template = env.get_template(template)
|
||||||
return template.render(**context)
|
try:
|
||||||
|
ret = template.render(**context)
|
||||||
|
except KeyError:
|
||||||
|
_lang = trans_real.get_language()
|
||||||
|
tower.deactivate_all()
|
||||||
|
ret = template.render(**context)
|
||||||
|
tower.activate(_lang)
|
||||||
|
return ret
|
||||||
|
|
||||||
|
|
||||||
def load_helpers():
|
def load_helpers():
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
from mock import patch, sentinel
|
from mock import Mock, patch, sentinel
|
||||||
|
|
||||||
|
from nose.tools import eq_
|
||||||
|
from test_helpers import render
|
||||||
import jingo.views
|
import jingo.views
|
||||||
|
from jingo import get_env
|
||||||
|
import jinja2
|
||||||
|
import tower
|
||||||
|
|
||||||
|
|
||||||
@patch('jingo.render')
|
@patch('jingo.render')
|
||||||
@ -8,3 +13,15 @@ def test_direct_to_template(mock_render):
|
|||||||
request = sentinel.request
|
request = sentinel.request
|
||||||
jingo.views.direct_to_template(request, 'base.html', x=1)
|
jingo.views.direct_to_template(request, 'base.html', x=1)
|
||||||
mock_render.assert_called_with(request, 'base.html', {'x': 1})
|
mock_render.assert_called_with(request, 'base.html', {'x': 1})
|
||||||
|
|
||||||
|
|
||||||
|
def test_template_substitution_crash():
|
||||||
|
tower.activate('xx')
|
||||||
|
|
||||||
|
env = get_env()
|
||||||
|
|
||||||
|
# The localized string has the wrong variable name in it
|
||||||
|
s = '{% trans string="heart" %}Broken {{ string }}{% endtrans %}'
|
||||||
|
template = env.from_string(s)
|
||||||
|
rendered = jingo.render_to_string(Mock(), template, {})
|
||||||
|
eq_(rendered, 'Broken heart')
|
||||||
|
@ -4,4 +4,5 @@ jinja2
|
|||||||
nose
|
nose
|
||||||
mock
|
mock
|
||||||
-e svn+http://code.djangoproject.com/svn/django/trunk@12335#egg=Django
|
-e svn+http://code.djangoproject.com/svn/django/trunk@12335#egg=Django
|
||||||
|
-e git://github.com/clouserw/tower.git#egg=tower
|
||||||
fabric
|
fabric
|
||||||
|
Loading…
Reference in New Issue
Block a user