代码之家  ›  专栏  ›  技术社区  ›  Hello World

django:无法下载生成文件

  •  0
  • Hello World  · 技术社区  · 6 年前

    我正在尝试生成一个文本文件并从模板中的链接下载它,但是在单击链接后什么也没有发生。

    这是我在模板中的链接。

    <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
    

    这是我的url.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),
    

    ]

    3 回复  |  直到 6 年前
        1
  •  6
  •   Mohit Solanki MatúÅ¡ Bartko    5 年前

    因为对你来说 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
    
        2
  •  0
  •   Vaibhav Mule    6 年前

    网址.py

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

    视图.py

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

    你在 templates 文件夹,你就可以得到文件了。

        3
  •  0
  •   Hello World    6 年前

    我解决我的问题。我的url.py似乎因为名称而出错。

    在修复之前,reportview.report和reportview.report_generate具有相同的路径。

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

    这是new url.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_中的code生成并生成文本文件并下载它。