summaryrefslogtreecommitdiff
path: root/repoze/bfg/traversal.py
diff options
context:
space:
mode:
Diffstat (limited to 'repoze/bfg/traversal.py')
-rw-r--r--repoze/bfg/traversal.py20
1 files changed, 16 insertions, 4 deletions
diff --git a/repoze/bfg/traversal.py b/repoze/bfg/traversal.py
index 2c78ecdc9..e15bb8f20 100644
--- a/repoze/bfg/traversal.py
+++ b/repoze/bfg/traversal.py
@@ -611,14 +611,26 @@ class TraversalContextURL(object):
environ = request.environ
if 'bfg.routes.route' in environ:
+ route = environ['bfg.routes.route']
matchdict = environ['bfg.routes.matchdict'].copy()
matchdict['traverse'] = path
- route = environ['bfg.routes.route']
- app_url = route.generate(**matchdict)
+ # we can't use route.generate here because our matchdict
+ # keys are Unicode
+ if route.minimization:
+ segments = route.generate_minimized(matchdict)
+ else:
+ segments = route.generate_non_minimized(matchdict)
+ if segments is False:
+ raise ValueError(
+ "Couldn't generate URL for matchdict %r" % matchdict)
+ app_url = request.application_url
+ if segments.startswith('/'):
+ return app_url + segments
+ else:
+ return app_url + '/' + segments
else:
app_url = request.application_url # never ends in a slash
-
- return app_url + path
+ return app_url + path
always_safe = ('ABCDEFGHIJKLMNOPQRSTUVWXYZ'
'abcdefghijklmnopqrstuvwxyz'