【问题标题】:NoReverseMatch when trying to access view from template尝试从模板访问视图时的 NoReverseMatch
【发布时间】:2017-10-27 21:42:39
【问题描述】:

我收到以下内容的 NoReverseMatch 错误:

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

我在渲染时将字符串 fileids 从视图传递到模板。

使用参数“()”和关键字参数反转“generateCSV”

'{'file_ids': '11111111_22222222'}' 未找到。尝试了 1 种模式:

['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 是基于类的视图的名称。我正在基于类的视图中渲染模板,并尝试使用参数fileids 调用功能视图。

如果我只是将 url 硬编码如下:

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

一切都按预期进行。

非常感谢您花时间阅读并为我提供任何帮助!

【问题讨论】:

  • 这实际上是我最初试图做相反的事情;但是,它给了我一个 NoReverseMatch,它尝试了 0 个模式:[]。我looked it up 发现您必须明确提供正确的命名空间才能引用正确的 urlpattern。问题在于参数以某种方式未附加到 url,然后与模式匹配。

标签: django django-templates django-views python-3.4 django-urls


【解决方案1】:

我的一个朋友指出我的正则表达式是错误的;如果您在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

“在方括号内,大多数字符都是按字面解释的。”

【讨论】:

    猜你喜欢
    • 2021-03-08
    • 2018-12-19
    • 2013-08-02
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    相关资源
    最近更新 更多