1

我正在开发一个 Django Web 应用程序。在这里,当提交表单时,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

项目网址.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。但我不确定如何纠正这个问题。请帮我。提前致谢。

4

1 回答 1

2

尝试这个:

在你看来

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 %}
于 2020-06-18T10:50:58.050 回答