2009-04-26 5 views
11

Sto tentando di restituire un CSV da un'azione nella mia webapp e di fornire all'utente una richiesta per scaricare il file o aprirlo da un'app di foglio di calcolo. Posso far sputare il CSV sullo schermo, ma come posso cambiare il tipo di file in modo che il browser riconosca che questo non dovrebbe essere visualizzato come HTML? Posso usare il modulo csv per questo?Come posso restituire un CSV da un'app Pylons?

import csv 

def results_csv(self): 

    data = ['895', '898', '897'] 

    return data 

risposta

12

dire al browser il tipo di contenuto si sta dando, è necessario impostare il Content-type intestazione per 'text/csv'. Nella funzione Piloni, il seguente dovrebbe fare il lavoro:

response.headers['Content-type'] = 'text/csv'

9

PAG è corretto, ma, inoltre, se si vuole suggerire un nome per il file scaricato è anche possibile impostare response.headers['Content-disposition'] = 'attachment; filename=suggest.csv'

+0

Questo aiuta, ma il file ha il nome "suggest.csv.html" Qualche idea su come risolverlo? –

+0

con entrambe le intestazioni di risposta (tipo di contenuto e disposizione del contenuto) impostato correttamente? Quale browser mostra questo strano comportamento .html - accodamento? –

8

Sì, è può utilizzare il modulo csv per questo:

import csv 
from cStringIO import StringIO 

...

def results_csv(self): 
    response.headers['Content-Type'] = 'text/csv' 
    s = StringIO() 
    writer = csv.writer(s) 
    writer.writerow(['header', 'header', 'header']) 
    writer.writerow([123, 456, 789]) 
    return s.getvalue()