1
我正在使用Django生成一個格式爲plist的模板,以便在iPhone應用程序中直接使用。但是,我無法讓plist根據我的數據庫正確輸出。基本上,我有一個包含測試的表。每個都有一個testID和一個test_type。該表使用unique_together子句確保沒有兩個條目具有相同的testID和test_type,並且還通過testID和test_type對結果進行排序。但在我的模板中,我想用同一個字典中的相同testID對所有測試進行分組。 我的模板看起來是這樣的:如果在plist模板中更改了django模板
<?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>
從本質上講,我希望{%如果換成%}指令來評估基礎上,它最後一次評估,不一樣的循環中。但是這當然不是實際的行爲,因爲它自然會根據最後一次循環迭代檢查其值。我應該如何產生我想要的輸出?另外,通過在生成測試數組:
tests = Test.objects.annotate(num_questions=Count('questions')).filter(num_questions__gt=0).all()
我的結果已經自動被testID列排序,這只是在模型中聲明,所以我不必在我的電話明確聲明排序 – ecbtln
的問題是在第一個循環中觸發第一個ifchanged的條件也會觸發最後一個ifchanged。實際上我希望最後一個ifchanged只用測試子集中的最後一個對象觸發,並使用comTestID。我需要在我的視圖的方法中手動完成嗎? – ecbtln