Django ListView: учет разницы во времени для всех элементов

Я новичок в представлениях на основе классов, так что это, вероятно, очевидно, но любые советы приветствуются. Я хочу отображать «оставшееся время» для каждого элемента в списке. То есть если у меня 10 объектов, каждый должен отображать в шаблоне количество дней, часов, мн, оставшихся до наступления дедлайна. Вот моя попытка:

модель.py

class Law(models.Model):
    deadline = models.DateTimeField(_(u'The Deadline'),)
    name = ..
    more_stuff = ..

просмотры.py

class LawList(ListView):
    model = Law
    context_object_name = 'law'
    template_name = 'template.html'

шаблон.html

{% for l in law %}
   <h3>{{ l.deadline }} - {{l.name }} </h3>
     {{l.more_stuff}}
{% endfor %}

все хорошо до сих пор. Однако я хотел бы иметь {{l.time-left}} вместо {{l.deadline}}. Есть ли способ для представления вычислить это и передать в шаблон?

Я думал добавить get_context_data в представление «LawList», но я не знаю, как это сделать для каждого элемента в моем списке. Ниже показано, что работает для одного элемента.

# views.py, below the section above
def get_context_data(self, **kwargs):
     context = super(LawList, self).get_context_data(**kwargs)
     context['time_left'] = Law.objects.all()[0].deadline - timezone.now() 

но я немного застрял. Спасибо!


person Massagran    schedule 10.12.2012    source источник


Ответы (1)


взгляните на тег шаблона timeuntil

person second    schedule 10.12.2012
comment
Никогда раньше такого не видел, люблю открывать для себя эти маленькие жемчужины - person Josh Smeaton; 10.12.2012
comment
благодаря. это было просто :). Я также обнаружил, что это был дубликат. см. здесь и немного подробнее здесь - person Massagran; 10.12.2012