尝试从模板访问视图时 NoReverseMatch

NoReverseMatch when trying to access view from template

我收到以下 NoReverseMatch 错误:

<a href ="{% url 'mainapp:secondaryapp:generateCSV' file_ids=fileids %}">Hello</a>

渲染时,我将视图中的字符串 fileids 传递到模板。

Reverse for 'generateCSV' with arguments '()' and keyword arguments

'{'file_ids': '11111111_22222222'}' not found. 1 pattern(s) tried:

['mainapp/secondaryapp/generateCSV/(?P[\d{8,20}]+\_*)/$']

我的mainapp/urls.py是:

  from django.conf.urls import url, include  
  from mainapp import views 
  urlpatterns = [
                 ...
                 url(r'^secondaryapp/', include('secondaryapp.urls', namespace="secondaryapp")),
                ]  

secondaryapp/urls.py是:

  from django.conf.urls import url          
  from search import views                                                        
  urlpatterns = [                                                                 
                   url(r'^$', views.secondaryapp.as_view(), name='secondaryapp'),          
                   url(r'^generateCSV/(?P<file_ids>[\d{8,20}]+\_*)/$', views.generateCSV, name='generateCSV'),                     

                ] 

generateCSV 是功能视图,secondaryapp 是基于class 的视图的名称。我在基于 class 的视图中呈现模板,并尝试使用参数 fileids.

调用功能视图

如果我简单地硬编码 url 如下:

  <a href = "generateCSV/{{fileids}}/">

一切正常。

非常感谢您抽出宝贵的时间阅读并提供任何帮助!

我的一个朋友指出我的正则表达式是错误的;如果您在 secondaryapp/urls.py

中使用以下内容
  url(r'^generateCSV/(?P<fileids>(?:\d{8,20}_)*\d{8,20}?)/$', views.generateCSV, name='generateCSV'),

secondaryapp/templates/secondaryapp/template.html

中的以下内容
  <a href = "{% url 'mainapp:secondaryapp:generateCSV' fileids %}">

然后事情按预期工作。

显然,当我尝试使用方括号对特殊字符进行分组时,是方括号害了我;据他说,他们将通常的运算符变成了常规字符,并可能使我也接受逗号和大括号。

根据this

"Within square brackets, most characters are interpreted literally."