2010-02-17 87 views
0

我有一个挂架控制器,其行为叫做连载返回content_type=text/csv。我希望根据输入的patameter命名该动作的响应,即对于下面的路由,生成的csv文件应该命名为{id}.csv/app/PROD/serialize =>PROD.csv(因此用户可以使用正确的名称在Excel中打开该文件直接通过web浏览器)主塔:响应重命名?有没有更好的办法?

map.connect('/app/{id}/serialize',controller = 'csvproducer',action='serialize') 

我试着设置不同的HTTP标头和没有运气的WebOb的响应对象的属性。

map.connect('/app/{id}/serialize',controller = 'csvproducer',action='serialize') 
map.connect('/app/csv/{foo}',controller = 'csvproducer', action='tocsv') 

控制器的片段:

def serialize(self,id): 
    try: 
    session['key'] = self.service.serialize(id) #produces csv content 
    session.save() 
    redirect_to(str("/app/csv/%s.csv" % id)) 
    except Exception,e: 
    log.error(e) 
    abort(503) 

def tocsv(self): 
    try: 
    csv = session.pop("rfa.enviornment.serialize") 
    except Exception,e: 
    log.error(e) 
    abort(503) 
    if csv: 
    response.content_type='text/csv' 
    response.status_int=200 
    response.write(csv) 
    else: 
    abort(404) 

上面的设置不过,我只需添加一个新的动作控制器和动态重定向原诉讼到新的行动,即想出了一个解决方法作品完美无瑕,但是,是否有更好/更灵活/更干净的方式?理想情况下,我不想重定向请求;相反,我想要么重新命名location或设置content-disposition: attachment; filename='XXX.csv' [不成功尝试都:(]

我失去了一些东西很明显这里

干杯

UPDATE: 由于EBO我已设法修复content-disposition。下次应该更好地阅读W3C规范;)

回答

2

您应该能够在response object上设置内容处置标题。

如果您已经尝试过,它可能不起作用,因为http标准表示引号应该由双引号标记完成。

+0

干杯,就是这样!缺少双引号。该死!我花了太多时间编写Python> :) – Dave 2010-02-18 08:13:21

相关问题