が付いたモデルPhoto
があるとしImageField
ます。
テンプレート内のすべての写真オブジェクトをによって反復しようとしました{% 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を介してDBにアクセスすることを含む場合があります)を実行し、必要なデータ/オブジェクトをコンテキストディクショナリとしてテンプレートシステムに渡します。
テンプレーティングシステムは、ビューから渡されたものだけを確認します。オブジェクトが遅延評価されたORMDBイテレータである場合、確かに、オブジェクトはDBにアクセスできます。ただし、ビューはそのオブジェクトをテンプレートのコンテキストに渡す必要があります。
テンプレートを試して、対応するビューによって名前が{{Photo}}
付けられたオブジェクトが実際に渡されていることを確認してください。"Photo"
生成されたhtmlのソースを検査する必要がある場合があります(repr
山かっこで何か奇妙なことをし、ブラウザで正しく表示されない場合に備えて)。