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

Django NoReverseMatch Exception for regular expression matching 2 routes

url(r'^v1/(statistics|analytics)/stats_bar$', views.stats_bar, name='stats_bar')

reverse('stats_bar')

ThrowsReverse for 'stats_bar' with arguments '()' and keyword arguments '{}' not found。尝试了 1 种模式:['v1/(statistics|analytics)/stats_bar$']

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

Django==1.6.9

https://docs.djangoproject.com/en/stable/ref/urlresolvers/#reverse

查看有关 args 的部分。

我认为 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