2009-04-26 8 views
11

Estoy tratando de devolver un CSV de una acción en mi aplicación web y le pido al usuario que descargue el archivo o lo abra desde una aplicación de hoja de cálculo. Puedo hacer que el CSV salga a la pantalla, pero ¿cómo cambio el tipo de archivo para que el navegador reconozca que no se debe mostrar como HTML? ¿Puedo usar el módulo csv para esto?¿Cómo devuelvo un CSV de una aplicación Pylons?

import csv 

def results_csv(self): 

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

    return data 

Respuesta

12

para decirle al navegador el tipo de contenido que está dando, es necesario establecer la cabecera Content-type a 'text/csv'. En su función de Torres de alta tensión, lo siguiente debe hacer el trabajo:

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

9

PAG es correcto, pero, además, si se desea sugerir un nombre para el archivo descargado también puede establecer response.headers['Content-disposition'] = 'attachment; filename=suggest.csv'

+0

Esto ayuda, pero el archivo tiene el nombre "suggest.csv.html" ¿Alguna idea de cómo solucionarlo? –

+0

con ambos encabezados de respuesta (tipo de contenido y disposición del contenido) configurados correctamente? ¿Qué navegador está exhibiendo este peculiar comportamiento .html? –

8

Sí, se puede utilizar el módulo csv para esto:

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() 
Cuestiones relacionadas