我需要一个django正则表达式,它实际上适用于url路由器执行以下操作:
匹配路线中不包含“/ api”的所有内容。
以下不起作用,因为django无法撤消(?!
r'^(?!api)
答案 0 :(得分:7)
通常的做法是订购路线声明,以便全面路线被/api
路线遮蔽,即:
urlpatterns = patterns('',
url(r'^api/', include('api.urls')),
url(r'^other/', 'views.other', name='other'),
url(r'^.*$', 'views.catchall', name='catch-all'),
)
或者,如果由于某种原因你真的需要跳过一些路由但是不能用Django支持的一组正则表达式来做,你可以定义一个自定义模式匹配器类:
from django.core.urlresolvers import RegexURLPattern
class NoAPIPattern(RegexURLPattern):
def resolve(self, path):
if not path.startswith('api'):
return super(NoAPIPattern, self).resolve(path)
urlpatterns = patterns('',
url(r'^other/', 'views.other', name='other'),
NoAPIPattern(r'^.*$', 'views.catchall', name='catch-all'),
)
答案 1 :(得分:0)
使用背后的负面看法:
r'^(?!/api).*$'
此链接说明了如何执行此操作:
http://www.codinghorror.com/blog/2005/10/excluding-matches-with-regular-expressions.html
答案 2 :(得分:0)
我在将django与反应路由器集成时出现此问题,我检查此链接以修复它。
decoupled frontend and backend with Django, webpack, reactjs, react-router