django href url带参数抛出错误

时间:2018-05-16 08:03:53

标签: python django

我有一个简单的href下载页面的以下设置:

urls.py

urlpatterns = [
    url(r'^kpis/$', InternalKPIView.as_view(), name='internal_kpis'),
    url(r'^tenants/$', TenantListView.as_view(), name='tenant-list'),
    url(r'^tenants/(?P<pk>[0-9]+)/$', TenantStatsView.as_view(), name='tenant-stats'),
    url(r'^fileformaterror/$', FileFormatErrorView.as_view(), name='file-format-error'),
    url(r'^fileformaterror/download/(?P<s3_key>.*)$', FileFormatErrorDownloadView.as_view(), name='file-format-error-download'),   
]

template.html:

<a href="{% url 'file-format-error-download' s3_key=file.s3_key %}" target="_blank">Download</a>

views.py:

class FileFormatErrorDownloadView(View):
    def get(self, request, s3_key):
        pass

但是在执行时我收到以下错误:

django.urls.exceptions.NoReverseMatch: Reverse for 'file-format-error-download' not found. 'file-format-error-download' is not a valid view function or pattern name.

相关文件的树输出:

$ tree -I "*.pyc|__pycache__"
.
├── apps.py
├── __init__.py
├── migrations
│   └── __init__.py
├── templates
│   └── backoffice
│    ├── file_format_error.html
│    └── internal_kpis.html
├── urls.py
└── views.py

3 directories, 7 files

2 个答案:

答案 0 :(得分:1)

根据您提供的内容,您显示的urls.py似乎属于项目中的某个应用程序。我的猜测是该应用程序的URL未正确包含或包含在命名空间中。

答案 1 :(得分:0)

为什么不使用django2.0 +?代码如下:

urls.py

path('fileformaterror/download/<s3_key>/', FileFormatErrorDownloadView.as_view(), name='file-format-error-download')

template.html

<a href="{% url 'file-format-error-download' file.s3_key %}" target="_blank">Download</a>

views.py

from django.shortcuts import HttpResponse
class FileFormatErrorDownloadView(View):
    def get(self, request, s3_key):
        return HttpResponse('success')