Django:无法下载生成文件

Django: Cannot download generating file

我正在尝试生成一个文本文件并从模板中的 link 下载它,但在我单击 link 后没有任何反应。

这是我在模板中的link。

<a href="{% url 'download' %}"><h2>{{ fname }} {{ lname }}</h2></a>

这是我的观点

def report_generate(request):
    f = open("test.txt", "w+")
    for i in range(10):
        f.write("This is line %d\r\n" % (i + 1))

    response = HttpResponse(f.read(), content_type='text/plain')
    filename = "guru99.txt"
    response['Content-Disposition'] = 'attachment; filename="%s"' % filename
    return response

这是我的urls.py

urlpatterns = [
path('admin/', admin.site.urls),
path('', qrview.index),
path('forms/new_profile', formsview.profile_create, name="aaa"),    # test
path('forms/new_course', formsview.course_create, name="ddd"),      # test
path('forms/edit_course', formsview.course_edit, name="edit_course"),   
path('report/', reportview.report, name="report"),
path('report/', reportview.report_generate, name="download"),
#path('admin/', admin.site.urls),
#path('admin/', admin.site.urls),

]

因为在你的情况下f.read()返回的是一个空字符串,你必须手动将文件指针移动到文件的开头以便在写入后读取内容

def report_generate(request):
  f = open("test.txt", "w+")
  for i in range(10):
    f.write("This is line %d\r\n" % (i + 1))
  f.seek(0) # Move the pointer at the beginning
  response = HttpResponse(f.read(), content_type='text/plain')
  f.close() # Close the file
  filename = "guru99.txt"
  response['Content-Disposition'] = 'attachment; filename="%s"' % filename
  return response

urls.py

  url(r'^(?P<filename>(test.txt))$',
    home_files, name='home-files')

views.py

def server_text_file(request, filename):
    return render(request, filename, {}, content_type="text/plain")

你 test.txt 文件在 templates 文件夹中,你将能够获取该文件。

我解决了我的问题。似乎我的 urls.py 有一些错误,因为名称。

在我修复它之前,reportview.report 和 reportview.report_generate 有相同的路线。

path('report/', reportview.report, name="report"),
path('report/', reportview.report_generate, name="download"),

这是新的urls.py

urlpatterns = [
path('admin/', admin.site.urls),
path('', qrview.index),
path('forms/new_profile', formsview.profile_create, name="aaa"),    # test
path('forms/new_course', formsview.course_create, name="ddd"),      # test
path('forms/edit_course', formsview.course_edit, name="edit_course"),   # test
path('report/', reportview.report, name="report"),
path('report/download', reportview.report_generate, name="download"),

]

到现在我还是搞不清楚到底发生了什么?我认为当我点击 link 时,它将转到 reportview.report_generate 中的代码并生成文本文件并下载它。