2017-12-12 40 views
0

私は、ユーザーがしかし、イムはトラブルDjangoはそのXLSXファイルをアップロードユーザーからの単純なテキストベースのWebページを返すようになったのと、Djangoでのxlsxファイルをアップロードするフィールドがあります。基本的に、アップロードしたxlsxファイルのセルからテキストを生成するには、Djangoが必要です。私はopenpyxlを使ってこれをしようとしています。スクリプトを実行した後にxlsxファイルの結果を含む新しいページを生成するにはどうすればよいですか?ユーザーがアップロードしたxlsxファイルを提出すると、そのテンプレートにリダイレクトする新しいテンプレートを作成する必要がありますか?ここに例があります。Djangoでxlsxファイルをアップロードした後にテキストWebページを生成するには?

# views.py 
from django.shortcuts import render 
from django.http import HttpResponseRedirect 
from django.core.urlresolvers import reverse 
from .forms import UploadForm 
import openpyxl 

def index2(request): 
    if request.method != 'POST': 
     form = UploadForm() 
    else: 
     form = UploadForm(request.POST or None, request.FILES or None) 
     if form.is_valid(): 
      form.save() 
      file = request.FILES['fileobj'] 
      wb = openpyxl.load_workbook(file) 
      sheet = wb.get_sheet_by_name('Sheet1') 
      # script that runs overs the sheet here... 
      return HttpResponseRedirect(reverse('webpage with results')) 


    context = {'form': form} 
    return render(request, 'upload/upload_page.html', context) 
+0

に思えます。 –

答えて

0

この問題を解決することをお勧めします。今、あなたは一度にいくつかのことを解決しようとしている:

  1. ファイル
  2. 保存をアップロードしたファイル
  3. ファイルを解析
  4. ファイルのビューをレンダリング

I 1)と2)を側面に置き、XSLX読み込み/表示部分で独立して作業します。たとえば、ビュー内のファイルのパスをハードコーディングして、そのように強固にすることができます。それは結局のところ開発です。一度それが良い、ハードコードされたファイルを削除し、実際のアップロード/保存ロジックを接続します。

現実的に、あなたはUploadedExcelFileを言う表すモデルクラスを作成することをお勧めします。ファイルがアップロードされると、インスタンスを作成して保存します(つまり、データベースの行)。次に、そのモデルインスタンスをロードするビューを作成します。このビューはExcelファイルをロードします。

また、ファイルを摂取するだけではなく、ディスクに保存する、または非同期的アプローチ(例えばdjango-q)のいくつかの種類を使用して検討する必要があります。これは、ファイルからどのような情報を抽出する必要があるか、編集可能なのかなど、いくつかの要素に依存します。私の場合、システムの境界を知らないと、私は次のようなことをします:

一時エリア
    • アップロードファイル
    • ストアファイルはファイルを表し、状態が「処理中」であると言うためにモデルオブジェクト(つまり、データベースの行)を作成します。
    • ファイルを取り込み、ファイル名を指定してdjango-qジョブを起動します。
    • このモデルへのビューを返します。
    • 非同期ジョブはファイルをロードし、関連するアスペクトをjsonに解析し、モデルオブジェクト(つまりデータベース)にデータを格納し、モデル状態を「準備完了」としてマークします。
    • ユーザーがデータを見るためにページをリロード(または再ロードするよう指示するなどのWebSocketを使用)することができます。あなたが可能な解決策への正しい軌道に乗っているよう
  • 関連する問題