0

私はモデルを使用せずにアップロード方法からの入力ファイルを受け取り、このようなサーバーDjangoを使って結果ファイルを提供するには?

の背後にあるいくつかのコードを実行するアプリケーションを開発している:

/MyDjango_project_directory/media/input.csv 

そして、このような場所では、いくつかの結果ファイルを生成します。

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

は現在、私はちょうど結果ページをレンダリングする前に、「views.py」で「SYS」コマンドでフォルダとダウンロードリンクを介して1が正常にファイルをダウンロードすることができ、「メディア」に出力ファイルを移動しています。これは私のために働いているが、私が探している最良の解決策ではない一時的な解決策です。私の "output_directory"をダウンロード用に追加できるように、どんなボディにもバッターアイディアがありますか?

更新

マイビュー:

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') 

のURL:

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'), 
] 

テンプレート:

{% 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 %} 
+0

あなたがここにあなたの意見コードを共有してくださいことはできますか? – viveksyngh

+0

@viveksyngh更新ありがとう – jax

答えて

0

たくさん苦労した後、最終的には私が必要なものを書き留めています:

ビューは次のようになります。

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 

とURL:

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

私は自分の質問に答えるのですこれは、私はちょうどこの少し前学んだこと、そしてここに掲載されているので、ある人がこの恩恵を受けることができるならば。何人かの専門家がこの答えに遭遇したら、それを親切に見直して、その醜い解決策または適切な解決策を萎縮させ、展開中にも機能するでしょうか?ありがとう。

この質問は私の概念を理解し、実装するために多くのことを支援してきました:Downloading the files(which are uploaded) from media folder in django 1.4.3

関連する問題