下载文件页面的 NoReverseMatch 错误
NoReverseMatch error for download file page
我正在开发一个 Django Web 应用程序。这里的网络应用程序在提交表单时生成一个 pandas 数据框。此数据框存储在根目录中。我有另一个视图用于下载生成的 csv 文件。但是当我重定向到下载页面时,我得到了一个没有反向匹配的错误。
到目前为止,这是我的代码
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')),
]
抓取器urls.py
urlpatterns = [
path('generate', views.generate_dataframe, name='generate_dataframe'),
path('download/<filename>/', views.download_file, name='download_file'),
]
我知道我在某处弄乱了 URL。但我不确定如何解决这个问题。请帮我。提前致谢。
试试这个:
在您看来
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 %}
我正在开发一个 Django Web 应用程序。这里的网络应用程序在提交表单时生成一个 pandas 数据框。此数据框存储在根目录中。我有另一个视图用于下载生成的 csv 文件。但是当我重定向到下载页面时,我得到了一个没有反向匹配的错误。
到目前为止,这是我的代码
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')),
]
抓取器urls.py
urlpatterns = [
path('generate', views.generate_dataframe, name='generate_dataframe'),
path('download/<filename>/', views.download_file, name='download_file'),
]
我知道我在某处弄乱了 URL。但我不确定如何解决这个问题。请帮我。提前致谢。
试试这个:
在您看来
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 %}