使用django-localeurl时无法延迟反向解析
我正在使用djangio-localeurl这个工具来根据我的网址切换语言,这个功能基本上运行得很好,不过有一点小问题。
在我的一些基于类的视图中,我使用了一个懒加载的反向函数,否则会出现缺少网址模式的错误。这是因为文件导入的顺序问题。有一个解释是:
因为你的视图装饰器在解析urls.py时被评估,所以你会遇到一个“鸡和蛋”的问题。反向方法reverse()不能使用,因为urls.py还没有被读取。
看起来django-localeurl对Django内部的reverse
函数进行了修改。这种修改运行得很好,但我的lazy_reverse
函数却出现了问题。现在当我运行测试时,在我使用lazy_reverse
函数的地方会出现错误。以下是我的lazy_reverse
函数的代码:
from django.utils.functional import lazy
from django.core import urlresolvers
reverse_lazy = lambda name=None, *args : lazy(urlresolvers.reverse, str)(name, args=args)
我一直遇到的错误是:
TypeError: Lazy object returned unexpected type.
我似乎无法理解是什么导致了这个问题。这个问题似乎在我从INSTALLED_APPS
设置中移除localeurl
后就消失了。
有没有什么办法可以解决这个问题呢?
谢谢
1 个回答
2
看起来是lazy_reverse
这个函数出错了。我没有把我的lazy_reverse
函数改成返回unicode
,而是返回了str
。下面是这个函数的样子:
from django.utils.functional import lazy
from django.core.urlresolvers import reverse
reverse_lazy = lazy(reverse, unicode)