2012-05-07 85 views
1

假設我有一個模型PhotoImageField我可以從django模板訪問數據庫嗎?

我試着迭代模板中的所有照片對象{% for photo in Photo.objects.all %}
什麼都沒有出現。

這是不可能的嗎?

+0

請顯示您的觀點代碼。正如Preet所說,模板不能直接訪問模型;他們只能得到上下文以及任何中間件增加的內容。 –

回答

5

通常的做法是,看起來是這樣的:

def photo_view(request): 
    return render_to_response('app_name/photos.html', { 
     'photos': Photo.objects.all() 
     }) 

然後(在本例爲app_name/templates/app_name/photos.html)模板具有類似:

{% for photo in photos %} 

如果你真的想做{% for photo in Photo.objects.all %},那麼你的視圖代碼必須通過上下文傳遞Photo

def photo_view(request): 
    return render_to_response('app_name/photos.html', { 
     'Photo': Photo 
     }) 

請記住,這是不是真的的方式做到這一點更好,因爲模板語法是很多比Python更嚴格。例如,在模板中沒有辦法做{% for photo in Photo.objects.filter(...) %};過濾需要在視圖中發生。

3

您可能正在考慮錯誤的方式。

HTTP請求被路由到一個視圖。

該視圖執行任何業務邏輯(可能涉及通過ORM訪問數據庫),然後將所有必需的數據/對象作爲上下文字典傳遞給模板系統。

模板系統只能看到它從視圖中傳遞過來的內容。如果對象是懶惰評估的ORM數據庫迭代器,那麼當然可以訪問數據庫。但視圖必須將該對象傳遞到模板的上下文中。

嘗試{{Photo}}在您的模板中,以確保它實際上是通過相應視圖傳遞名爲"Photo"的對象。您可能需要檢查生成的html的源代碼(如果由於其repr它使用尖括號做了一些奇怪的事情,並且在瀏覽器中無法正確顯示)。

相關問題