Django URL模板匹配(除模式外的所有内容)

时间:2014-01-10 21:45:04

标签: django

我需要一个django正则表达式,它实际上适用于url路由器执行以下操作:

匹配路线中不包含“/ api”的所有内容。

以下不起作用,因为django无法撤消(?!

r'^(?!api)

3 个答案:

答案 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