X-Git-Url: http://git.ithinksw.org/philo.git/blobdiff_plain/f6f8274ec87a79bfbcf6af6a998e9ff79e64d160..bf7348280872f3e17f6cb766f27d57c41d9e2ae0:/models/nodes.py diff --git a/models/nodes.py b/models/nodes.py index 07a5e0a..99be196 100644 --- a/models/nodes.py +++ b/models/nodes.py @@ -7,6 +7,7 @@ from django.core.exceptions import ValidationError from django.core.servers.basehttp import FileWrapper from django.core.urlresolvers import resolve, clear_url_caches, reverse, NoReverseMatch from django.template import add_to_builtins as register_templatetags +from django.utils.encoding import smart_str from inspect import getargspec from philo.exceptions import MIDDLEWARE_NOT_CONFIGURED from philo.models.base import TreeEntity, Entity, QuerySetMapper, register_value_model @@ -210,7 +211,6 @@ class TargetURLModel(models.Model): reversing_parameters = JSONField(blank=True, help_text="If reversing parameters are defined, url_or_subpath will instead be interpreted as the view name to be reversed.") def clean(self): - # Should this be enforced? Not enforcing it would allow creation of "headers" in the navbar. if not self.target_node and not self.url_or_subpath: raise ValidationError("Either a target node or a url must be defined.") @@ -226,8 +226,13 @@ class TargetURLModel(models.Model): 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 = dict([(smart_str(k, 'ascii'), v) for k, v in params.items()]) return self.url_or_subpath, args, kwargs def get_target_url(self): @@ -254,7 +259,7 @@ class TargetURLModel(models.Model): abstract = True -class Redirect(View, TargetURLModel): +class Redirect(TargetURLModel, View): STATUS_CODES = ( (302, 'Temporary'), (301, 'Permanent'),