2016-09-07 1 views
0

私はDjangoの新機能です.Django Pythonを使用して解決しようとしている問題の詳細な説明は次のとおりです。Matplotlibの図をファイルに保存してブラウザに表示するDjango

問題: -

複数のCSVファイルをアップロードします(5つのファイルが合計)し、その後、それらのファイルを取得し、アップロードされたファイルに対応する5つの数字を構築します。最後に、ユーザーにファイルのアップロードを依頼する単一のページを作成したい場合は、ファイルをアップロードするためのコンホメーションメッセージが表示されます。その後、ファイルが表示されるのは、ユーザーがグラフボタンをクリックして5つの図を同じWebページに表示する場合だけです。これまで

私の試み: -

私のviews.pyの抜粋:

def Upload(request): 
    list_doc = [] 
    for count, x in enumerate(request.FILES.getlist('files')): 
      def multifiles(f): 
        with open(dir_path + x.name + str(count) + ".csv" , 'wb+') as destination: 
          list_doc.append(x.name) 
          for chunk in f.chunks(): 
            destination.write(chunk) 
      multifiles(x) 

    docs = list_doc 
    return render_to_response("myapp/mypage.html", {'upload_num':str(count+1)+" Files uploaded successfully!", "files_list":docs}, context_instance = RequestContext(request)) 


def graph(request): 

plt.figure(num) 
plt.plot(x,y, color =colorcurve, label=filename) 
ax = plt.subplot(111) 
ax.plot(x,y, color =colorcurve, linewidth=1.5) 
plt.legend(fontsize = 7.9, bbox_to_anchor=(0.61, 1), loc=6, borderaxespad=0.) 
file_saved = plt.savefig(dirpath+filename, format='png') 
figure = dirpath+filename+".png" 
return render_to_response("myapp/mypage.html", {'file_saved':figure},context_instance = RequestContext(request)) 

私はurls.pyで使用するかわからないのですか?助けてください? HTMLで

 <body> 
      <!-- Uplading files! --> 
      <p><a href="{% url 'list' %}" align="right">Return to home</a></p> 
      <p> Please, starting uploading your files <p> 

        <form action="{% url "UploadFile" %}" method="post" enctype="multipart/form-data"> 
        {% csrf_token %} 
        <input type="file" name="files" multiple/> 
        <input type="submit" value="Upload" /> 
      </form> 

      <form action="{% url "list" %}" method="post" enctype="multipart/form-data"> 
        {% csrf_token %} 

        <!-- input type="file" name="files" multiple/--> 
        <input type="submit" value="Graphing" /> 
      </form> 
      <br> 
      <div style="overflow:hidden;"> 
      {% load staticfiles %} 


        <img src="{% static "myapp/afile1-M1" %}" alt="My image" height="400" width="400" float=left hspace="30" border="1.8" /> 

私はRUNSERVERすると、それが新しいウィンドウにグラフを表示します。私はいくつかのことをしたい。 1つは、図をファイルに保存することです。次に、別のウィンドウに移動する必要なく、同じブラウザーウィンドウに表示します。たくさん事前に

+0

更新しました。これをチャットに移動することができます。 –

答えて

0

UPDATE

ありがとう: あなたは、「グラフ」をクリックされた場合にのみ、グラフを描きたい場合は、それゆえ、あなたの入力タイプに名前を付ける:

<input type="submit" value="Graphing" name="graphing"/> 

、その後のことができます

if request.POST.get('graphing'): 
#basically means "if user has clicked the graphing button" 

、この情報がお役に立てば幸いです:それはあなたのビューでクリックされたかどうかをチェック

は、二つのビューを作成します。

def draw_pie(request): 
    size = request.GET.get('size') 
    return render(request, 'blog/draw_pie.html', {'size':size}) 

from pylab import figure, axes, pie, title 
from matplotlib.backends.backend_agg import FigureCanvasAgg 
def pies (rquest, size): 
    f = figure(figsize=(6,6)) 
    ax = axes([0.1, 0.1, 0.8, 0.8]) 
    labels = 'Frogs', 'Hogs', 'Dogs', 'Logs' 
    fracs = [15,size,45, 10] 
    explode=(0, 0.05, 0, 0) 
    pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True) 
    title('Raining Hogs and Dogs', bbox={'facecolor':'0.8', 'pad':5}) 

    canvas = FigureCanvasAgg(f) 
    response = HttpResponse(content_type='image/png') 
    canvas.print_png(response) 
    matplotlib.pyplot.close(f) 
    return response 

最初のものは、フォームが含まれますが、もう一つは、グラフを描画します。

2つのURLを作成します。

url(r'^pies/(?P<size>\d+)/$', views.pies, name='pies'), 
    url(r'^draw_pie/$', views.draw_pie, name='draw_pie'), 

あなたが好きなように最初のものは、グラフの変数を設定するには、パラメータとして、または多くのパラメータが含まれています。私は円グラフでfracsの1つのサイズを設定しました。

2番目のフォームは、フォームのURLです。

empty 

draw_pie.htmlと呼ばれる1つの以上のテンプレート:

enter image description here

<form method="GET" action="/draw_pie/"> 
      <h1>Pie Size</h1> 

      <label> 
       <span>Size: </span> 
       <input type="number" step = "any" id="searchBox" class="input-medium search-query" 
       name="size" placeholder="size"><br> 
      </label> 


      <input type="submit" class="button" value="Draw Pie" > 
     </form> 

     <img src="http://yourwebsite.com/pies/{{ size }}"><br> 

これはあなたにこの結果を与える

は、2つのテンプレートを作成し、1つの空の一つは pies.htmlと呼ばれます

yサイズを99に変更してドローをクリックすると、ページがリロードされ、入力したパラメータを使用して新しいグラフが作成され、imgタグを使用してグラフが直接呼び出されます。また、パラメータがURLで渡されている見ることができます:

enter image description here

を、私はこのことができます願っています。

+0

完全に実用的な例を私に提供してください。 – aBiologist

+0

@aBiologist私は今編集を行い、助けてくれたら教えてください。 –

+0

大きな説明に感謝します。問題は、imgタグを追加すると、サイズを入力するかどうかにかかわらずイメージが表示されることです。ユーザーが描画イメージをクリックした場合にのみイメージを表示するサイズのないimgタグを追加することは可能ですか?ありがとうございます – aBiologist

関連する問題