2014-12-18 1 views
1

오늘받은 메시지를 그룹화하려고합니다. 어제 받았습니다. 명확히하기 위해, 나는 "오늘"이라는 단일 헤더를 가지고 그 메시지를 아래에 나열하려고합니다. 나는 그 날에받은 각 메시지 (현재 무슨 일이 일어나고 있는지)와 함께 "오늘"을 인쇄하려하지 않습니다.for 루프를 사용하는 동안 '받은 날짜'를 한 번만 인쇄하려면 어떻게해야합니까?

나는 현재 for 루프 내에 오늘 및 예선 헤더를 가지고 있으므로 메일 메시지마다이 헤더를 인쇄하는 이유는 이해하지만 이전에 언급 한대로 한 번만 인쇄하려고합니다. 내 질문은, 어떻게 내가 아래의 코드를 사용하여 이것을 얻을 수 있습니까? 각 기간 (오늘, 어제, 지난 주 등)마다 별도의 for 루프를 만들어야합니까, 아니면이를 수행하는보다 효율적인 방법이 있습니까?

{% for message in messages %} 
    {% if message.date - current.date < 24 hours %} 
     TODAY 
     Sent by: {{ message.sender }} 
     {{ message.body }} 
    {% elif message.date - current.date > 24 hours and message.date - current.date < 48 hours %} 
     YESTERDAY 
     Sent by: {{ message.sender }} 
     {{ message.body } 
    {% endif %} 
{% endfor %} 
+0

당신 별도의 루프가 필요합니다. – rfj001

+0

당신은 간단하게'flag = 0'을 사용할 수 있고 처음으로 그것을 증가시킨 다음'if flag! = 0'를 출력하지 않을 것입니다. – vks

+0

메시지가 날짜순으로 정렬되었다고 가정하면 작동 할 수 있습니다. – rfj001

답변

1

{{forloop.first}}을 사용할 수 있습니다. 그래서 코드가 오늘받은하여 그룹 메시지에 노력하고

{% for message in messages %} 
    {% if message.date - current.date < 24 hours %} 
     {% if forloop.first %} 
      TODAY 
     {% endif %} 
    {% elif message.date - current.date > 24 hours and message.date - current.date < 48 hours %} 
     {% if forloop.first %} 
     YESTERDAY 
     {% endif %} 
    {% endif %} 

    Sent by: {{ message.sender }} 
    {{ message.body }} 

{% endfor %} 
1

로 업데이트 할 수 있습니다,

@Rohan 당신에게 대답을하는 듯했으나 그것도 각 루프에 대한 검사를 실행합니다 어제

접수 한 번만 문자열을 인쇄 할지라도.

더 나은 방법은 메시지를 체계화하고 날짜 차이로 주문하는 것입니다.

이 작업을 수행하는 가장 좋은 방법은 다음과 같이 템플릿에 보내기 전에 그룹에보기에서 메시지입니다 :

템플릿 많이 간단 이제
from collections import defaultdict 
from django.utils.timesince import timesince # This will give us nice human 
               # friendly date offsets 

def some_view(request): 

    messages = Message.objects.order_by('date') 
    grouped_messaged = defaultdict(list) 
    for message in messages: 
     grouped_messages[timesince(message.date)].append(message) 

    return render(request, 'template.html', {'all_messages': messages}) 

:

<ul> 
{% for header,messages in all_messages.items %} 
    <li>{{ header }} 
    <ul> 
    {% for message in messages %} 
     <li>{{ message.sender }} - {{ message.body }}</li> 
    {% endfor %} 
    </ul></li> 
{% endfor %} 
</ul> 
관련 문제