【发布时间】:2014-01-30 01:19:30
【问题描述】:
我需要一个真正适用于 url 路由器的 django 正则表达式来执行以下操作:
匹配路由中不包含“/api”的所有内容。
以下不起作用,因为 django 无法反转 (?!
r'^(?!api)
【问题讨论】:
标签: django
我需要一个真正适用于 url 路由器的 django 正则表达式来执行以下操作:
匹配路由中不包含“/api”的所有内容。
以下不起作用,因为 django 无法反转 (?!
r'^(?!api)
【问题讨论】:
标签: django
解决此问题的通常方法是对路由声明进行排序,以便包罗万象的路由被/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'),
)
【讨论】:
像这样使用负面的眼神:
r'^(?!/api).*$'
此链接解释了如何做到这一点:
http://www.codinghorror.com/blog/2005/10/excluding-matches-with-regular-expressions.html
【讨论】:
我在将 django 与 react 路由器集成时遇到了这个问题,我检查了这个链接来修复它。
decoupled frontend and backend with Django, webpack, reactjs, react-router
【讨论】: