Django url reverse:不可逆的reg-exp部分:'(?='

时间:2012-05-13 08:52:33

标签: django django-urls

Django版本:1.5(主干)

我在网址模式A中使用正向前瞻断言,它本身可以正常工作。但是当我试图反转完全无关的网址模式B时,我得到:

ValueError: Non-reversible reg-exp portion: '(?='

网址示例:

url(r'^foo(?=bar)/', test, name= 'bla'),
url(r'bar/', test, name= 'bli'),

触发错误:

from django.core.urlresolvers import reverse
reverse('bli')

我找到了这张相关的票,但并没有让我更加聪明 https://code.djangoproject.com/ticket/17492

任何人都可以告诉我代码有什么问题吗?

1 个答案:

答案 0 :(得分:4)

您的代码没问题,问题是,Django无法反转每个可能的正则表达式。目前,Django的regex规范化程序的实现至少不能处理两件事:disjunction(|)和非捕获(look-ahead,look-behind)模式。

因此,要解决您的问题,请避免在您的网址格式中使用预测,这样您就可以了。毕竟,使用简单的正则表达式而不是所有那些时髦的扩展都可以表示任何常规语言。