Wie kann man Ergebnisdatei mit Django bedienen?

Ich habe eine App entwickelt, die Eingabedatei aus der Upload-Methode ohne Modell verwendet und einige Code hinter dem Server ausführen

so was:

/MyDjango_project_directory/media/input.csv 

Und generiert einige Ergebnisdateien an einem solchen Ort.

 /Virtualenv_directory/MyDjango_project_directory/OutPut_files_directory/result.csv /Virtualenv_directory/MyDjango_project_directory/OutPut_files_directory/result.png 

Jetzt bin ich nur verschieben die Ausgabedateien in "Medien" Ordner durch "sys" -Befehl in "views.py" kurz vor dem Rendern der Ergebnis-Seite und durch Download-Link kann man die Dateien erfolgreich herunterladen. Dies ist eine vorübergehende Lösung, die für mich arbeitet, aber nicht die beste Lösung für die ich suche. Hat jeder Körper irgendwelche Teig Idee, so dass ich meine "output_directory" widmen kann für die Download-Zwecke hinzufügen.

aktualisiert

Meine Ansichten:

 from django.shortcuts import render from django.core.files.storage import FileSystemStorage from django.shortcuts import render, redirect from django.conf import settings from django.core.files.storage import FileSystemStorage import os import glob from django.core.files.storage import FileSystemStorage def Home_page(request): return render(request, 'protocol/home.html', {}) #def Main_protocol(request): # return render(request, 'protocol/main_protocol.html', {} def simple_upload(request): result_files_list = [] if request.method == 'POST' and request.FILES['myfile']: myfile = request.FILES['myfile'] fs = FileSystemStorage() filename = fs.save(myfile.name, myfile) uploaded_file_url = fs.url(filename) os.system("python /home/user/Desktop/pep_learn_project/new_pep_src/protocol/PEP_learn_1.0_selected/Sample_protocol.py > pro.log") os.system("rm /home/user/Desktop/pep_learn_project/new_pep_src/media/*.csv") base_link = "/home/user/Desktop/pep_learn_project/new_pep_src/" names = [] files_to_download = glob.glob("/path_to_files/*.*") for i, f in enumerate(files_to_download): if f.split(".")[1] in ["csv", "jpg"]: names.append(files_to_download[i].split("/")[6]) return render(request, 'protocol/successful.html', { 'names': names, 'base_link':base_link }) return render(request, 'protocol/main_protocol.html') 

Urls:

 from django.conf.urls import url from django.contrib import admin from . import views urlpatterns = [ url(r'^$', views.Home_page, name='Home_page'), url(r'^protocol/$', views.simple_upload, name='simple_upload'), ] 

Vorlage:

 {% block content %} <style type="text/css"> table { margin-bottom: 20px; border-collapse: collapse; border-spacing: 0; width: 30%; border: 1px solid #ddd; bgcolor: #00FF00; } th, td { border: none; text-align: left; padding: 8px; } tr:nth-child(even){background-color: #f2f2f2} </style> <div style="overflow-x:auto;"> <table align="center"> <tr> <th align="center">Result files</th> </tr> {% for a in names %} <tr> {% if a %} <td><a href="/media/{{a}}"> {{a}} </a> <br></td> {% endif %} </tr> {% endfor %} </table> </div> {% endblock %} 

One Solution collect form web for “Wie kann man Ergebnisdatei mit Django bedienen?”

Nachdem ich endlich viel gekämpft habe, habe ich aufgeschrieben, was ich brauche:

Ansichten wäre:

 def Download_files(request, file_name): file_path = os.path.join('/out_put_files', file_name) file_wrapper = FileWrapper(file(file_path,'rb')) file_mimetype = mimetypes.guess_type(file_path) response = HttpResponse(file_wrapper, content_type=file_mimetype ) response['X-Sendfile'] = file_path response['Content-Length'] = os.stat(file_path).st_size response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(file_name) return response 

Und die URLs:

  url(r'^protocol/(?P<file_name>.+)$', views.Download_files, name='Download_files'), 

Ich antworte auf meine eigene Frage, das heißt, ich habe das schon vor kurzem gelernt und hier gepostet, damit jemand davon profitieren kann. Wenn irgendwelche Experten auf diese Antwort stoßen, berichten sie freundlich, es sei eine hässliche Lösung oder eine passende Lösung und wird es auch während des Einsatzes funktionieren? Vielen Dank.

Diese Frage hat mir sehr geholfen, das Konzept zu verstehen und zu implementieren: Herunterladen der Dateien (die hochgeladen werden) aus dem Medienordner in django 1.4.3

  • Django: Hinzufügen von Inline-Formate-Zeilen ohne Javascript
  • Wie man <span> anstelle von <li> tag produziert
  • So erstellen Sie Password Field im Modell django
  • Django admin viele zu viele Teilmenge
  • Django - wie kann ich eine Zelle in einer Tabelle in der admin * changelist * Schnittstelle bearbeitbar nur, wenn es null ist?
  • Gerenderte Schnecken sind nicht richtig in url django
  • Python ist die beste Programmiersprache der Welt.