utils: fix get_templated_url to work with packed contexts (#16308)

This commit is contained in:
Frédéric Péters 2017-05-13 15:10:00 +02:00
parent 124e2e2fc2
commit 8bc7085ac0
2 changed files with 12 additions and 2 deletions

View File

@ -35,6 +35,7 @@ from requests import Response, Session as RequestsSession
from django.conf import settings
from django.core.cache import cache
from django.template import Context
from django.utils.html import strip_tags
from django.utils.http import urlencode, quote
@ -174,9 +175,9 @@ class UnknownTemplateVariableError(KeyError):
pass
def get_templated_url(url, context=None):
template_vars = {}
template_vars = Context()
if context:
template_vars.update(context.flatten())
template_vars.update(context)
user = getattr(context.get('request'), 'user', None)
if user and user.is_authenticated():
template_vars['user_email'] = quote(user.email)

View File

@ -87,3 +87,12 @@ def test_templated_url():
assert get_templated_url('[test_url]/[foobar]/?NameID=[user_nameid]&email=[user_email]',
context=context) == \
'http://www.example.net/barfoo/?NameID=r2%26d2&email=foo%3D3%40example.net'
# packed contexts
request = RequestFactory().get('/')
request.user = None
context = Context({'request': request})
context.update({'foo': 'bar'})
ctx = Context()
ctx.update(context)
assert get_templated_url('[foo]', context=ctx) == 'bar'