假設我有一個模型Photo
與ImageField
。我可以從django模板訪問數據庫嗎?
我試着迭代模板中的所有照片對象{% for photo in Photo.objects.all %}
。
什麼都沒有出現。
這是不可能的嗎?
假設我有一個模型Photo
與ImageField
。我可以從django模板訪問數據庫嗎?
我試着迭代模板中的所有照片對象{% for photo in Photo.objects.all %}
。
什麼都沒有出現。
這是不可能的嗎?
通常的做法是,看起來是這樣的:
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(...) %}
;過濾需要在視圖中發生。
您可能正在考慮錯誤的方式。
HTTP請求被路由到一個視圖。
該視圖執行任何業務邏輯(可能涉及通過ORM訪問數據庫),然後將所有必需的數據/對象作爲上下文字典傳遞給模板系統。
模板系統只能看到它從視圖中傳遞過來的內容。如果對象是懶惰評估的ORM數據庫迭代器,那麼當然可以訪問數據庫。但視圖必須將該對象傳遞到模板的上下文中。
嘗試{{Photo}}
在您的模板中,以確保它實際上是通過相應視圖傳遞名爲"Photo"
的對象。您可能需要檢查生成的html的源代碼(如果由於其repr
它使用尖括號做了一些奇怪的事情,並且在瀏覽器中無法正確顯示)。
請顯示您的觀點代碼。正如Preet所說,模板不能直接訪問模型;他們只能得到上下文以及任何中間件增加的內容。 –