From 1073a83f2ceb330c80da275c0709786a7a84c513 Mon Sep 17 00:00:00 2001 From: Chris Beaven Date: Sun, 20 Feb 2011 04:55:11 +0000 Subject: Ensure render_to_string leaves the context instance stack in the state it was originally passed in. git-svn-id: http://code.djangoproject.com/svn/django/trunk@15591 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/template/loader.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'django') diff --git a/django/template/loader.py b/django/template/loader.py index 279d8e86fe..e58dc3231d 100644 --- a/django/template/loader.py +++ b/django/template/loader.py @@ -179,11 +179,15 @@ def render_to_string(template_name, dictionary=None, context_instance=None): t = select_template(template_name) else: t = get_template(template_name) - if context_instance: - context_instance.update(dictionary) - else: - context_instance = Context(dictionary) - return t.render(context_instance) + if not context_instance: + return t.render(Context(dictionary)) + # Add the dictionary to the context stack, ensuring it gets removed again + # to keep the context_instance in the same state it started in. + context_instance.update(dictionary) + try: + return t.render(context_instance) + finally: + context_instance.pop() def select_template(template_name_list): "Given a list of template names, returns the first that can be loaded." -- cgit v1.3