【问题标题】:Django URL template match (everything except pattern)Django URL 模板匹配(除了模式之外的所有内容)
【发布时间】:2014-01-30 01:19:30
【问题描述】:

我需要一个真正适用于 url 路由器的 django 正则表达式来执行以下操作:

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

以下不起作用,因为 django 无法反转 (?!

r'^(?!api)

【问题讨论】:

    标签: django


    【解决方案1】:

    解决此问题的通常方法是对路由声明进行排序,以便包罗万象的路由被/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'),
    )
    

    【讨论】:

      【解决方案2】:

      像这样使用负面的眼神:

      r'^(?!/api).*$'
      

      此链接解释了如何做到这一点:

      http://www.codinghorror.com/blog/2005/10/excluding-matches-with-regular-expressions.html

      【讨论】:

      • OP 声明这不起作用。 normalize 的文档字符串确实声明: (6) 在所有其他非捕获 (?...) 形式(例如前瞻和后瞻匹配)和任何析取 ('|') 构造上引发错误。
      【解决方案3】:

      我在将 django 与 react 路由器集成时遇到了这个问题,我检查了这个链接来修复它。

      decoupled frontend and backend with Django, webpack, reactjs, react-router

      【讨论】:

        猜你喜欢
        • 2017-11-25
        • 2021-05-26
        • 2022-08-21
        • 1970-01-01
        • 1970-01-01
        • 2019-10-14
        • 1970-01-01
        相关资源
        最近更新 更多