X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/9c6f7a4f5ddd6758197a552bbc689868cf99054c..ba4bab73996c40c2551f7e5a0e478d0f553b8af3:/models/nodes.py?ds=inline diff --git a/models/nodes.py b/models/nodes.py index 09376b8..3f40205 100644 --- a/models/nodes.py +++ b/models/nodes.py @@ -114,8 +114,8 @@ class View(Entity): try: subpath = reverse(view_name, urlconf=self, args=args or [], kwargs=kwargs or {}) - except NoReverseMatch: - raise ViewCanNotProvideSubpath + except NoReverseMatch, e: + raise ViewCanNotProvideSubpath(e.message) if node is not None: return node.construct_url(subpath) @@ -219,22 +219,31 @@ class TargetURLModel(models.Model): try: self.get_target_url() - except NoReverseMatch, e: + except (NoReverseMatch, ViewCanNotProvideSubpath), e: raise ValidationError(e.message) super(TargetURLModel, self).clean() def get_reverse_params(self): params = self.reversing_parameters - args = isinstance(params, list) and params or None - kwargs = isinstance(params, dict) and params or None + args = kwargs = None + if isinstance(params, list): + args = params + elif isinstance(params, dict): + # Convert unicode keys to strings for Python < 2.6.5. Compare + # http://stackoverflow.com/questions/4598604/how-to-pass-unicode-keywords-to-kwargs + kwargs = {} + for key, val in params.items(): + if isinstance(key, unicode): + key = str(key) + kwargs[key] = val return self.url_or_subpath, args, kwargs def get_target_url(self): node = self.target_node if node is not None and node.accepts_subpath and self.url_or_subpath: if self.reversing_parameters is not None: - view_name, args, kwargs = self.get_reversing_params() + view_name, args, kwargs = self.get_reverse_params() subpath = node.view.reverse(view_name, args=args, kwargs=kwargs) else: subpath = self.url_or_subpath @@ -245,7 +254,7 @@ class TargetURLModel(models.Model): return node.get_absolute_url() else: if self.reversing_parameters is not None: - view_name, args, kwargs = self.get_reversing_params() + view_name, args, kwargs = self.get_reverse_params() return reverse(view_name, args=args, kwargs=kwargs) return self.url_or_subpath target_url = property(get_target_url)