2013-06-27 92 views
3

我調用一個Python函數,它使用XlsxWriter在我的Django應用程序中通過Ajax將一些數據寫入excel。我用jQuery來綁定我的一個按鈕的onclick方法來調用這個函數。然而,當我調用它時,Django給我一個錯誤,說'exportHistoExcel沒有定義'。這讓我感到困惑,因爲同一個腳本中的所有其他函數都被識別並正在運行,但是由於某種原因沒有定義這個函數。任何人都可以幫我嗎?通過Ajax調用的Python函數'未定義'

這裏是我的Python腳本:

from xlsxwriter.workbook import Workbook 

def exportHistoExcel(SE_filelocation, VTfile_location, filename): 

    print('anything?') 
    #new getFiringRates return statement: 
    # if generating_excel_file: return [bins, spikeanglebins, headanglebins, times, firingrates] 
    # else: return True 
    #new getFiringRates parameter: 
    # generating_excel_file = False 

    data = getFiringRates(SE_filelocation, VTfile_location, generating_excel_file = True) 
    print(data) 

    workbook = Workbook(filename) 
    worksheet = workbook.add_worksheet() 
    worksheet.write('A1', 'Bin (degrees)') 
    worksheet.write('B1', '# of Spikes') 
    worksheet.write('C1', '# of Samples') 
    worksheet.write('D1', 'Time (sec)') 
    worksheet.write('E1', 'Firing Rate') 

    worksheet.write_column('A2', data[0]) 
    worksheet.write_column('B2', data[1]) 
    worksheet.write_column('C2', data[2]) 
    worksheet.write_column('D2', data[3]) 
    worksheet.write_column('E2', data[4]) 
    worksheet.write('A62', 360); worksheet.write('B62', '=$B$2') 
    worksheet.write('C62', '=$C$2'); worksheet.write('D62', '=$D$2'); worksheet.write('E62', '=$E$2') 


    histo = workbook.add_chart({'type': 'line'}) 
    histo.set_title({'name': 'Firing Rates'}) 
    histo.set_x_axis({'name': 'Bin (degrees)'}) 
    histo.set_y_axis({'name': 'Firing rate (sec^-1)'}) 
    histo.add_series({'values': '=Sheet1!$E$2:$E$61', 
         'line': {'color': 'black'}, 
        'categories': '=Sheet1!$A$2:$A$61'}) 
    histo.set_legend({'delete_series': [0]}) 
    worksheet.insert_chart('F2', histo) 


    workbook.close() 

這是我的ajax.py文件:

from django.utils import simplejson 
from dajaxice.decorators import dajaxice_register 
from hipercic.apps.NeuroCiC import models 
from django.core.files import storage 
import file_analysis 
import sys 

@dajaxice_register 
def export_excel_file(request, id): 
    print 'TRIAL ID', id 

    try: 
    trial = models.Trial.objects.get(pk=id) 
    except: 
    'Could not find trial.' 
    else: 
    print 'Found Trial' 
    print('~/hipercic/apps/NeuroCiC/uploads/' + trial.spikes_file.url) 
    SE_loc = '~/hipercic/apps/NeuroCiC/uploads/' + trial.spikes_file.url 
    VT_loc = '~/hipercic/apps/NeuroCiC/uploads/' + trial.led_file.url 
    print(SE_loc) 
    print(VT_loc) 
    exportHistoExcel(SE_loc, VT_loc, "demo.xlsx") 
    return 

Ajax中的打印語句都打印到終端,但在exportHitoExcel所有的有不。爲什麼它不認識我的Python函數?

+0

你有雙重檢查未成年人的問題,如錯誤的壓痕,錯別字等? –

+5

你很明顯沒有將'exportHistoExcel'導入到'ajax.py'中 – karthikr

+0

python腳本被稱爲file_analysis.py,它被導入到ajax.py文件的頂部,還有一些其他的函數在那裏與exportHistoExcel運行正常。 – Sonofblip

回答

1

它工作時,我改變了

exportHistoExcel(SE_loc, VT_loc, "demo.xlsx") 

線這樣的:

return simplejson.dumps({'scatter_data': file_analysis.exportHistoExcel("test.xlsx") })