我想在我的網站上顯示出版物清單;不過,我還想在這個特定的年份發表一篇標題,說明每一套出版物的年份。檢測行差異(視圖或模型)?
所以我想爲我的最終結果是這樣的(我的名聲是1 :(我不能上傳圖片):
https://dl.dropboxusercontent.com/u/10752936/Screen%20Shot%202013-06-21%20at%206.00.15%20PM.png
我有三列的表; id (primary key), title (the title of the article), and date (the date of publications)
在我的模板文件,執行以下操作將每一篇文章之前打印頭:
{% for curr_pub in all_publications %}
<h1>{{ curr_pub.date.year }}</h1>
<li>{{ curr_pub.title }}</li>
{% endfor %}
我傳遞all_publications
訂購'-date'
這意味着我可以比較當前行curr_pub
的年與前一個並檢查它是否有所不同;並相應地打印(或不打印)標題。但似乎我不能在模板中做到這一點。
因爲我是Django和Python的新手,我不知道該怎麼做,這是我需要幫助的地方;我的想法是以下幾點:
1)添加一個函數在model
(def is_it_first_publication(self):
)返回true
或false
- 但我真的沒能做到這一點:| - ...我不確定那是否是我需要做的或不是!
2)第二個是在view
中做,並將額外的變量傳遞給模板;這裏有一個例子(對於這種情況下工作得很好):
在視圖:
def publications(request):
all_publications = Publications.objects.order_by('-date')
after_first_row_flag = False
f_year = 'Null'
list_of_ids_of_first_publications = []
for curr_pub in all_publications:
if after_first_row_flag:
if curr_pub.date.year != f_year:
list_of_ids_of_first_publications.append(curr_pub.id)
f_year = curr_pub.date.year
else:
# The year of first (or earliest) publication has to be added
#
list_of_ids_of_first_publications.append(curr_pub.id)
f_year = curr_pub.date.year
after_first_row_flag = True
template = loader.get_template('counters/publications.html')
context = RequestContext(request, {
'all_publications': all_publications,
'list_of_first_publications': list_of_ids_of_first_publications,
})
return HttpResponse(template.render(context))
在模板:
{% for curr_pub in all_publications %}
{% if curr_pub.id in list_of_first_publications %}
<h1> {{ curr_pub.date.year }} </h1>
{% endif %}
<li> Placeholder for [curr_pub.title] </li>
{% endfor %}
三個答案提示重組貼對方的一分鐘之內。尼斯。 –
現在一個爲接受答案而死亡的戰鬥;) –
我會upvote所有和接受彼得的答案:) - 因爲他沒有忘記年'date.year'而不是'date' = P - 那麼將分組子組也被排序('-date')? – Thuglife