与えられたモデルは、「タスク」と呼ばれるモデルに対する外部キー関係を持つ「コメント」と呼ばれるモデルです。Djangoテンプレートの外部キーに関連するオブジェクトのコレクションを制限する方法は?
Entry.objects.all()[:5]
与えられたモデルは、「タスク」と呼ばれるモデルに対する外部キー関係を持つ「コメント」と呼ばれるモデルです。Djangoテンプレートの外部キーに関連するオブジェクトのコレクションを制限する方法は?
Entry.objects.all()[:5]
{% for task in tasks %}
{% for comment in task.comment_set.all|slice:"5" %}
{{ comment }}
{% endfor %}
{% endfor %}
あなたがいない:
{% for task in tasks %}
{% for comment in task.comment_set.all %}
{{ comment }}
{% endfor %}
...
などの5つのコメントに、これを制限するための最良の方法は何ですか。あなたはテンプレートで "本物の仕事"をするべきではない、これはMVC patternを破る。
ビューで実際の作業を行い、(コンテキスト辞書を使用して)テンプレートにデータを渡します。
def handle_comments(request):
tasks = Task.objects.all()
comments = {}
for task in tasks:
comments[task] = task.comment_set.all()[:5]
return render_to_response('commenting.html', {'comments': comments})
次に、あなたのテンプレートにコメントを反復処理することができます
{% for task, task_comments in comments.items %}{{ task }}{% endfor %}
作品&感謝をMVCパターンに私にヒントを与えるため。 –
ありがとう、それも同様に動作します。 どちらが良い方法ですか? –
まあそこには、データのそのようなわずかな操作を可能にする多くのdjangoテンプレートタグ/フィルタがありますので、私はそのmvcコンセプトのそのような大きな違反を見ていないでしょう、また、djangoは、 docs.djangoproject.com/ja/dev/faq/general/#django-appears-to-be-a-mvc-framework-but-you-call-the-control-the-view-and-the-view-the -template-how-come-you-don-t-use-the-standard-names –