Django NoReverseMatch匹配2条路由的正则表达式的异常

时间:2015-12-24 04:19:57

标签: python regex django django-urls

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)