Code

Ticket #6346: url_patch.2.diff

File url_patch.2.diff, 2.0 KB (added by sorl, 7 years ago)
Line 
1--- django/template/defaulttags.py.org  2008-01-09 14:40:46.000000000 +0100
2+++ django/template/defaulttags.py      2008-01-11 10:21:02.000000000 +0100
3@@ -356,9 +356,26 @@
4 
5     def render(self, context):
6         from django.core.urlresolvers import reverse, NoReverseMatch
7-        args = [arg.resolve(context) for arg in self.args]
8-        kwargs = dict([(smart_str(k,'ascii'), v.resolve(context))
9-                       for k, v in self.kwargs.items()])
10+        args = []
11+        for arg in self.args:
12+            if arg[0] in ["'", '"'] and arg[0] == arg[-1]:
13+                arg = arg[1:-1]
14+            else:
15+                try:
16+                    arg = Variable(arg).resolve(context)
17+                except VariableDoesNotExist:
18+                    pass
19+            args.append(arg)
20+        kwargs = {}
21+        for k, v in self.kwargs.items():
22+            if v[0] in ["'", '"'] and v[0] == v[-1]:
23+                v = v[1:-1]
24+            else:
25+                try:
26+                    v = Variable(v).resolve(context)
27+                except VariableDoesNotExist:
28+                    pass
29+            kwargs[smart_str(k,'ascii')] = v
30         try:
31             return reverse(self.view_name, args=args, kwargs=kwargs)
32         except NoReverseMatch:
33@@ -367,7 +384,10 @@
34                 return reverse(project_name + '.' + self.view_name,
35                                args=args, kwargs=kwargs)
36             except NoReverseMatch:
37-                return ''
38+                if settings.TEMPLATE_DEBUG:
39+                    raise
40+                else:
41+                    return ''
42 
43 class WidthRatioNode(Node):
44     def __init__(self, val_expr, max_expr, max_width):
45@@ -1047,9 +1067,9 @@
46             if '=' in arg:
47                 k, v = arg.split('=', 1)
48                 k = k.strip()
49-                kwargs[k] = parser.compile_filter(v)
50+                kwargs[k] = v
51             else:
52-                args.append(parser.compile_filter(arg))
53+                args.append(arg)
54     return URLNode(bits[1], args, kwargs)
55 url = register.tag(url)
56