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 中的代码并生成文本文件并下载它。
我正在尝试生成一个文本文件并从模板中的 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 中的代码并生成文本文件并下载它。