私はDjangoを使用して、iPhoneアプリケーション内で直接使用するplistとしてフォーマットされたテンプレートを生成しています。しかし、データベースに基づいてplistを正しく出力することができません。本質的に、私はテストを含むテーブルを持っています。それぞれtestIDとtest_typeを持っています。このテーブルでは、unique_together句を使用して、同じtestIDとtest_typeを持つエントリが2つありません。また、testIDとtest_typeで結果を並べ替えます。しかし私のテンプレートでは、同じ辞書内の同じtestIDを持つすべてのテストをグループ化したいと思います。 マイテンプレートは次のようになります。ディレクティブそれがなく、同じループ内で、最後に評価した時間に基づいて評価することdjangoテンプレートがplistテンプレート内で変更された場合
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>all_tests</key>
<array>
{% for t in tests %}
{% ifchanged t.testID %}<dict>
<key>testID</key>
<string>{{ t.testID }}</string>
<key>sections</key>
<array>{% endifchanged %}
<dict>
<key>pk</key>
<integer>{{ t.pk }}</integer>
<key>type</key>
<string>{{ t.test_type }}</string>
<key>num_questions</key>
<integer>{{ t.num_questions }}</integer>
</dict>
{% ifchanged t.testID %}</array>
</dict>{% endifchanged %}{% endfor %}
</array>
を基本的に、私は{変わっ%があれば%}を望んでいました。もちろん、これは実際の動作ではありません。なぜなら、最後のループ反復に基づいて値を自然にチェックするからです。希望の出力をどのように作り出すべきですか? 「テスト」セットはテストIDによって順序付けされた場合に動作するはず
tests = Test.objects.annotate(num_questions=Count('questions')).filter(num_questions__gt=0).all()
私の結果は既に自動的にテストID列によって順序付けされ、私は明示的に問題がある、私のコール – ecbtln
で注文宣言する必要はありませんので、これは単なるモデルで宣言されています最初のループ内で最初にifchangedされたのと同じ条件は、最後にifchangedをトリガーします。実際には、最後のifchangedが、テストのサブセット内の最後のオブジェクトに対してのみ、commen testIDでトリガーするようにしたいときです。私のビューの方法で手動で達成する必要がありますか? – ecbtln