【问题标题】:Django NoReverseMatch Exception for regular expression matching 2 routes正则表达式匹配 2 个路由的 Django NoReverseMatch 异常
【发布时间】:2016-03-30 13:38:38
【问题描述】:
url(r'^v1/(statistics|analytics)/stats_bar$', views.stats_bar, name='stats_bar')

reverse('stats_bar')

抛出没有找到带有参数“()”和关键字参数“{}”的“stats_bar”。尝试了 1 种模式:['v1/(statistics|analytics)/stats_bar$']

有什么方法可以操纵 Django 尝试的模式或其他简单的方法来处理这个问题?

Django==1.6.9

【问题讨论】:

    标签: python regex django django-urls


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      我认为 django 将 (statics|analytics) 解释为变量的模式。我建议如下:

      1. 为同一个视图定义 2 个不同的 url:

        url(r'^v1/statistics/stats_bar$', views.stats_bar, name='stats_bar_statistics')
        url(r'^v1/analytics/stats_bar$', views.stats_bar, name='stats_bar_analytics')
        
        reverse('status_bar_statistics') # usage
        

        并在视图内部测试使用了哪个 url:

        if 'analytics' in request.path:
            # do something
        elif 'statistics' in request.path:
            # do otherthing
        
      2. 你定义一个带有参数的url:

        url(r'^v1/ (?P<type>(statistics|analytics))/stats_bar$', views.stats_bar, name='stats_bar')
        
        reverse('status_bar', kwargs={'type': 'statistics'}) # usage
        

      【讨论】:

      • @knbk 你测试了吗?我已经对此进行了测试,它对我很有用。
      • 对不起,我看错了django中的相关代码。不支持它,除非在捕获组中,在这种情况下,它只是被适当的参数完全替换。这意味着您的解决方案是完全有效的。
      猜你喜欢
      • 1970-01-01
      • 2018-08-29
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 2015-02-07
      • 2011-08-05
      • 1970-01-01
      相关资源
      最近更新 更多