python/django 日期之间的差异,以及进度条的比率
python/django difference between dates, and ratio for progress bar
我正在尝试制作一个自动 progressBar
,它采用事件的 end_date
和 beggining_date
并为您提供事件的完成比率,例如 20 % 完成或 40% 完成等
我认为我的代码中可能存在多个错误,但目前我收到 AttributeError
'QuerySet' object has no attribute 'time_progress'
.思路是调用time_progress()
,完成率会return。
我的代码:
models.py
class Event(models.Model):
# other Fields above
beginning_date = models.DateTimeField("Beggining date")
end_date = models.DateField("Completion date")
def time_progress(self):
now = timezone.now()
progress = ((now - self.beginning_date).days/((self.end_date - now).days + (now - self.beginning_date).days))*100
return progress
views.py
class EventView(generic.DetailView):
model = Event
template_name = 'info/event.html'
def get_context_data(self, **kwargs):
context = super(EventView, self).get_context_data(**kwargs)
context['progress'] = Event.objects.filter(pk=self.kwargs.get('pk')).time_progress()
return context
event.html
<div class="progress">
<div class="progress-bar progress-bar-success progress-bar-striped" role="progressbar"
aria-valuenow="{{ progress }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ progress }}%">{{ progress }}%</div>
</div>
DetailView
已经在其上下文中包含一个 {{ object }}
。您不需要自定义 get_context_data
方法,而是在您的模板中使用:
... style="width:{{ object.time_progress }}%" ...
如果您确实想在模板中创建 progress
,请考虑使用 {% with progress=object.time_progress %}...{% endwith %}
或修复您的 get_context_data
:
context['progress'] = self.object.time_progress()
您可能还想将值向下舍入(可能使用 int()
)
我正在尝试制作一个自动 progressBar
,它采用事件的 end_date
和 beggining_date
并为您提供事件的完成比率,例如 20 % 完成或 40% 完成等
我认为我的代码中可能存在多个错误,但目前我收到 AttributeError
'QuerySet' object has no attribute 'time_progress'
.思路是调用time_progress()
,完成率会return。
我的代码:
models.py
class Event(models.Model):
# other Fields above
beginning_date = models.DateTimeField("Beggining date")
end_date = models.DateField("Completion date")
def time_progress(self):
now = timezone.now()
progress = ((now - self.beginning_date).days/((self.end_date - now).days + (now - self.beginning_date).days))*100
return progress
views.py
class EventView(generic.DetailView):
model = Event
template_name = 'info/event.html'
def get_context_data(self, **kwargs):
context = super(EventView, self).get_context_data(**kwargs)
context['progress'] = Event.objects.filter(pk=self.kwargs.get('pk')).time_progress()
return context
event.html
<div class="progress">
<div class="progress-bar progress-bar-success progress-bar-striped" role="progressbar"
aria-valuenow="{{ progress }}" aria-valuemin="0" aria-valuemax="100" style="width:{{ progress }}%">{{ progress }}%</div>
</div>
DetailView
已经在其上下文中包含一个 {{ object }}
。您不需要自定义 get_context_data
方法,而是在您的模板中使用:
... style="width:{{ object.time_progress }}%" ...
如果您确实想在模板中创建 progress
,请考虑使用 {% with progress=object.time_progress %}...{% endwith %}
或修复您的 get_context_data
:
context['progress'] = self.object.time_progress()
您可能还想将值向下舍入(可能使用 int()
)