下载文件页面的 NoReverseMatch 错误
Posted
技术标签:
【中文标题】下载文件页面的 NoReverseMatch 错误【英文标题】:NoReverseMatch error for download file page 【发布时间】:2020-10-08 09:31:28 【问题描述】:我正在开发一个 django 网络应用程序。在这里,当提交表单时,Web 应用程序会生成一个 pandas 数据框。此数据框存储在根目录中。我有另一个用于下载生成的 csv 文件的视图。但是当我重定向到下载页面时,我得到一个 No reverse match 错误。
这是我目前的代码
def randomfilename(stringLength=8):
lettersAndDigits = string.ascii_letters + string.digits
return ''.join(random.choice(lettersAndDigits) for i in range(stringLength))
def generate_dataframe(request):
if request.method == 'POST':
...
df = pd.DataFrame(columns=cols)
df['title'] = title_lst
df['link'] = product_links[:1]
fn = randomfilename()
df.to_csv('./'+fn+'.csv')
return redirect("download_file", filename = fn)
def download_file(request, filename):
if request.method == 'POST':
file_path = './'+filename
file = open(file_path, 'r')
mime_type, _ = mimetypes.guess_type(file_path)
response = HttpResponse(file, content_type=mime_type)
response['Content-Disposition'] = "attachment; filename=%s" % filename
return response
项目 urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('scraper.urls')),
]
scraper urls.py
urlpatterns = [
path('generate', views.generate_dataframe, name='generate_dataframe'),
path('download/<filename>/', views.download_file, name='download_file'),
]
我知道我在某处弄乱了 URL。但我不确定如何纠正这个问题。请帮我。提前致谢。
【问题讨论】:
【参考方案1】:试试这个:
在你看来
from django.urls import reverse
def generate_dataframe(request):
...
return redirect(reverse('download_file', kwargs='filename': fn))
在你的 urls.py 中:
urlpatterns = [
...
path('download/<str:filename>/', views.download_file, name='download_file'),
]
在您的模板中:
% url 'download_file' filename %
【讨论】:
我仍然收到此错误Reverse for 'download_file' with no arguments not found. 1 pattern(s) tried: ['download/(?P<filename>[^/]+)/$']
您的 urls.py 是在您的基础应用中还是在其他应用中?
项目只包含项目文件夹和app文件夹。项目中只有一个应用程序。应用名称是刮板。问题中的 URL 位于 app 文件夹中。我还编辑了问题以添加项目 URL。请看一下
在您的 urls.py 中在 urlsparterns app_name='scraper'
之前添加一个变量。然后在你看来,做:return redirect(reverse('scraper:download_file', kwargs='filename': fn))
我试过了。它没有帮助。我为应用程序 URL 添加了另一个路径,例如 path('download/', views.download_file, name='download_file'),
,这样当它是 get request
时,显示网页,当按下按钮时,下载文件。现在我得到一个不同的错误download_file() missing 1 required positional argument: 'filename'
。我做的对吗?以上是关于下载文件页面的 NoReverseMatch 错误的主要内容,如果未能解决你的问题,请参考以下文章
按钮中的“NoReverseMatch”指的是在 url 中带有参数的页面
升级 Django 和 NoReverseMatch 密码错误