2011-08-01 60 views
2

私はjQuery初心者です。私は、成功せずにファイルのダウンロードダイアログウィンドウを設定しようとしています。ダイアログウィンドウがロードされている場合、ユーザーは動的に生成されたファイルをダウンロードするオプションが必要です。私はダイアログウィンドウを設定できません。DjangoとjQueryを使用してファイルダウンロードダイアログを設定するには?

デバッグでは、有効なhttp応答が生成されていることがわかります。生成されたコンテンツ配置データは以下の通りである:

attachment; filename=foo.csv 

使用事例:

私のアプリケーションは、Djangoのテンプレート上のデータベースからフェッチされたデータを表示するために使用されるDjangoのWebアプリケーションです。私は

コード

のJavascript/HTML形式

/** 
* Creates a file to be downloaded upon clicking a button. 
*/ 
$('button[id*="ExportToCsv"]').click(function() { 
    var report_type = $(this).attr('id').split('ExportToCsv')[0]; 
    // var report_date = '{{ report_date }}'.split('-'); 
    $.ajax({ 
     url: '/reports/' + report_type + '/export_to_csv/', 
     type: 'POST', 
     mimeType: 'text/csv', 
     data: {'report_date': '{{ report_date }}'}, 
     success: function(data) { 
      return data; 
     } 
    }); 
}); 
「CSVへのエクスポート」を必要なときに、ユーザーがテキストとボタンをクリックすると、CSV形式で表示されるデータをダウンロードする機能を提供したいです

HTML:

<button id = "ExportToCsv">Export To Csv</button> 

ジャンゴ:

class CsvOutputResponse(object): 
    """Handles a csv file attachment object. 

    Attributes: 
    filename: String name of the csv file. 
    response: HttpResponse object. 
    writer: Csv writer object. 
    """ 

def __init__(self, filename): 
    """Initalizes the CsvOutputResponse class. 

    Args: 
    filename: String name of the csv file. 
    """ 
    self.filename = filename 
    self.response = self._InitializeResponse() 
    self.writer = csv.writer(self.response) 

def _InitializeResponse(self): 
    """Initialize a csv HttpResponse object. 

    Returns: 
    HttpResponse object. 
    """ 
    response = django_dep.HttpResponse(mimetype='text/csv') 
    response['Content-Disposition'] = (
     'attachment; filename=%s.csv' % self.filename) 
    return response 

def WriteRow(self, content): 
    """Write a single row to the csv file. 

    Args: 
    content: List of strings of csv field values. 
    """ 
    self.writer.writerow(content) 

def WriteRows(self, content): 
    """Write multiple row to the csv file. 

    Args: 
    content: List of lists of strings of csv field values. 
    """ 
    self.writer.writerows(content) 

def GetCsvResponse(self): 
    """Get the csv HttpResponse object. 

    Returns: 
    content: HttpResponse object. 
    """ 
    return self.response 

urls.py

(r'^reports/(?P<report_type>\w+)/export_to_csv/$', 
'myproject.myapp.views.ExportTab') 

views.py

def ExportTab(request, report_type): 
    """Generates a file to be exported and made available for download. 

    Args: 
    request: HttpRequest object. 
    report_type: String type of report to be generated. 

    Returns: 
    HttpResponse object. 
    """ 
    report_date = request.POST['report_date'] 
    db = database.Database() 
    if report_type == 'Trailing': 
    reports = containers.GetTrailingReports() 
    elif report_type == 'Ytd': 
    reports = containers.GetYtdReports() 
    return CsvOutputResponse('foo.txt').writeRows(reports).GetCsvResponse() 

答えて

1

代わりのAJAXにPOSTを実行し、ブラウザが自然ビューに移動有します。ブラウザはダウンロードを促します。

+0

申し訳ありませんが分かりません。あなたはさらに精緻化できますか? – Kartik

+0

フォームを使用してください。 –

+0

それは私のために働いた。おかげさまでイグナシオ... – Kartik

関連する問題