2014-02-11 246 views
2

類文件對象,我創建了一個請求,對象是這樣的:蟒蛇請求返回流

obj.mp3 = requests.get('http://foo.com/bar.mp3', stream=True) 

我以爲我可以只給這obj.mp3對象爲期望一個文件或URI的任何音頻播放器,顯然這個想法是錯誤的:沒有發揮。下面是完整的代碼:

#views.py 

class ArticleDetailView(DetailView): 
    model = Article 
    template_name = 'song.html' 

    def get_object(self): 
     obj = super(ArticleDetailView, self).get_object() 

     #code to store mp3 url in obj.mp3 and other stuff 

     if obj.mp3: 
      obj.mp3 = requests.get(obj.mp3, stream=True).content 
     return obj 

#song.html 
<div class="audio"> 
    <audio src={{ article.mp3 }} type="audio/mpeg"> 
</div> 

什麼治療患有requests回報的東西,我可以用播放器流的正確方法是什麼?我知道至少我可以將obj.mp3寫入文件,然後將播放器指向文件位置,但我試圖避免將文件寫入磁盤。

感謝,

回答

6

查找到io module使用類似文件的對象。

也許你可以使用io.BytesIO,你可以用Response.content進行初始化。然後,而不是字節列表,你會得到一個類似文件的對象。

import io 
resp = requests.get(url, stream=True) 
obj.mp3 = io.BytesIO(resp.content) 
+0

經過數小時的試圖弄清楚,我傾向於得出這樣的結論:django模板期望一個字符串,特別是對於任何音頻播放器,字符串需要表示一個URL或指向媒體。但是你和我的代碼都返回一個對象。不管怎麼說,還是要謝謝你。 –

1

Django的責任是生成HTML代碼,然後由瀏覽器解釋。瀏覽器是需要流式傳輸音頻的。您需要通過Django模板傳遞mp3 url,然後像http://www.jwplayer.com/這樣的播放器可以在客戶端進行流式傳輸。