reversed(..)
действительно не создает коллекцию элементов: это итератор , так что это означает, что он выполняет итерации по чему-то (ну, это дает элементы), и если этоисчерпан, нет (прямого) способа повторить перечисление.
Таким образом, вам нужно материализовать итератор в некоторой коллекции, например list
или tuple
, например:
def organization_reports(request):
now = datetime.datetime.now()
years = <b>list(</b>reversed(["{0}".format(year) for year in range(now.year-7,now.year)])<b>)</b>
my_dict = {"years" : years}
return render(request, 'organization_reports/organization.html', my_dict)
Или мы можем построить list
путем обращения самого range(..)
объекта, который необходимо перечислить только один раз:
def organization_reports(request):
now = datetime.datetime.now()
years = ["{0}".format(year) for year in <b>reversed(</b>range(now.year-7,now.year)<b>)</b>]
my_dict = {"years" : years}
return render(request, 'organization_reports/organization.html', my_dict)
или мы можем даже закодировать обращение в самом объекте range(..)
:
def organization_reports(request):
now = datetime.datetime.now()
years = ["{0}".format(year) for year in range(<b>now.year-1,now.year-8, -1</b>)]
my_dict = {"years" : years}
return render(request, 'organization_reports/organization.html', my_dict)
Независимо от того, как мы его сконструируем, в результате получается, что years
теперь является коллекцией , а не итератор .Можно (обычно) перечислить коллекцию произвольное количество раз (и это определенно верно для list
с и tuple
с).