使用django-localeurl时无法延迟反向解析

0 投票
1 回答
1276 浏览
提问于 2025-04-17 06:21

我正在使用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) 

撰写回答