2010-02-17 83 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

相關問題