Django URL反向:不可逆的正则表达式部分:'(?='

dja*_*aut 1 django django-urls

Django版本:1.5(主干)

我在网址格式A中使用了肯定的前瞻性断言,它本身可以正常工作。但是当我尝试反向完全不相关的网址模式B时,我得到:

ValueError: Non-reversible reg-exp portion: '(?='
Run Code Online (Sandbox Code Playgroud)

网址示例:

url(r'^foo(?=bar)/', test, name= 'bla'),
url(r'bar/', test, name= 'bli'),
Run Code Online (Sandbox Code Playgroud)

触发错误:

from django.core.urlresolvers import reverse
reverse('bli')
Run Code Online (Sandbox Code Playgroud)

我找到了这张相关的票证,但可悲的是并没有使我更聪明 https://code.djangoproject.com/ticket/17492

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

kon*_*iik 5

您的代码正常,问题是,Django无法反转所有可能的正则表达式。当前,Django的regex规范化器实现无法处理至少两件事:析取(|)和非捕获(先行,后进)模式。

因此,要解决您的问题,只需避免在URL模式中使用预读功能就可以了。毕竟,应该可以使用不带所有那些时髦扩展的普通正则表达式来表示任何正则语言。