これはうまくいけば迅速で簡単なものです。カスタムテンプレートタグを使用してこれを回避する方法を知っていますが、他に見落としていた方法があるかどうか興味がありました。ブログ用にある種のギャラリー機能を作成しました。すべてのギャラリーにページを表示するギャラリーリストページがあります。さて、そのリストにある各ギャラリーのすべての写真を表示したくはありません。各ギャラリーに20枚の画像がある場合、5つの投稿でページ付けすると、1ページに100枚の画像が表示されるからです。それは無駄であり、物事を進めるための間違った方法です。
私が持っている質問は、写真セットから3枚の写真を表示する方法はありますか?私がやりたいのですが、私はしませんthink可能です(擬似コード)のようなものです:
{% for photos in gallery.photo_set %}
{% if forloop.counter lt 3 %}
<img src="{{ photos.url }}">
{% endif %}
{% endfor %}
ドキュメントから判断すると、完全に見逃していない限り、テンプレートシステムでは不可能です。したがって、それを回避するために、ある種の独自のテンプレートタグを書くことができます。私はおそらく視点の観点から何かをすることができましたが、私はその考えを深く調べていませんでした。私が持っている他のオプションは、モデルにプレビューフィールドを与え、ユーザーがプレビューフィールドで必要な写真を選択できるようにすることです。
とにかく、いくつかの異なるオプションがあるので、私はあなたがそれをどのように行うかを見るために聴衆をポーリングすると思いました。ご意見をいただければ幸いです。個人的には、この猫の皮を剥ぐ方法はたくさんあります。
使用する:
{% for photos in gallery.photo_set|slice:":3" %}
これは、gallery.photo_set
コレクションで行う方が適切です。テンプレートにハードコードされた「3」は、長期的には悪い考えです。
class Gallery( object ):
def photo_subset( self ):
return Photo.objects.filter( gallery_id = self.id )[:3]
ビュー機能では、ランダムな写真を3枚、または最新の写真を3枚選ぶなどの操作を実行できます。
def photo_recent( self ):
return Photo.objects.filter( gallery_id = self.id ).orderby( someDate )[:3]
def photo_random( self ):
pix = Photo.objects.filter( gallery_id = self.id ).all()
random.shuffle(pix)
return pix[:3]