2016-07-28 127 views
1

假設在views.py相應的功能看起來像如何將圖像傳遞給Django中的模板?

from PIL import Image 
def get_img(request, img_source) 
    base_image = Image.open(os.getcwd() + '/deskprod/media/img/'+ img_source + ".png") 
    #Some editing of base_image done with PIL that prevents image from being directly loaded in html 
    return render_to_response('get_img.html', { 
     'base_image': base_image}, 
     context_instance=RequestContext(request)) 

我怎樣才能然後顯示在get_img.html模板base_image

+0

您不需要將圖像傳遞到您的上下文。你只需要圖像的路徑來顯示你的模板中的圖像 –

+0

摩西,謝謝你的迴應。在實際的程序中,會有一些無法在html中實現的圖像編輯 - 即使用python圖像庫進行的操作。因此,直接從模板加載圖像不是一種選擇。我編輯了這個問題來表明這一點。 –

+0

「因此,直接從模板直接加載圖像不是一個選項」 - 這是一個不合適的選項。僅僅因爲您編輯圖像並不意味着您無法將其保存在某個地方並正常查看。無論如何,將原始圖像數據傳遞給模板,您會獲得什麼?談論一些HTML並不是要做的... –

回答

5

您應該處理圖像,將其保存在本地磁盤上,然後發送一個或更多路徑,就像將該圖像作爲上下文對應於html模板的媒體url一樣。您需要配置您的django服務器來提供靜態和媒體文件,並配置在生產環境中配置這些文件。在這裏閱讀更多https://docs.djangoproject.com/en/1.9/howto/static-files/

但是,如果你不能或者真的不想在本地保存它,它應該有可能創建動態圖像,並與PIL一起在Django中使用。它會像你應該添加的代碼一樣。

response = HttpResponse(mimetype="image/png") 
base_image.save(response, "PNG") 
return response 

檢查也更多信息http://effbot.org/zone/django-pil.htm,它可能工作,雖然我沒有測試它。

+0

我很驚喜,實際上有一個簡單的解決方案來解決這個問題。非常感謝卡米爾。 –

0

我認爲您必須將圖像(寫入臨時文件)保存到項目的靜態目錄中,並在模板中使用靜態命令和圖像文件名來顯示它。

相關問題