所以我有一个使用模板变量的html代码。出于某种原因,在遍历模板变量后,列表为空?是否需要将指针重置为模板变量的索引0?谢谢!第二个选择没有要迭代的内容,也没有选项值。 Years是这样的数组[2015,2016,2017,2018]
<select data-placeholder="Choose Year 1..." id="yr1">
{% for year in years %}
<option value="{{year}}">{{year}}</option>
{% endfor %}
</select>
<h4 style="margin-bottom: 0px; margin-right: 20px; margin-left: 20px">to</h4>
<select data-placeholder="Choose Year 2..." id="yr2">
{% for year in years %}
<option value="{{year}}">{{year}}</option>
{% endfor %}
</select>
这是视图
def organization_reports(request):
now = datetime.datetime.now()
years = reversed(["{0}".format(year) for year in range(now.year-7,now.year)])
my_dict = {"years" : years}
return render(request, 'organization_reports/organization.html', my_dict)
答案 0 :(得分:1)
reversed(..)
不会不构造元素的集合:它是一个 iterator ,因此这意味着它会迭代某些内容(并产生元素),并且如果已用尽,则没有(直接)方法可以重复进行枚举。
因此,您需要在某种集合中(例如,list
或tuple
,例如实现迭代器:
def organization_reports(request):
now = datetime.datetime.now()
years = list(reversed(["{0}".format(year) for year in range(now.year-7,now.year)]))
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 reversed(range(now.year-7,now.year))]
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(now.year-1,now.year-8, -1)]
my_dict = {"years" : years}
return render(request, 'organization_reports/organization.html', my_dict)
无论我们如何构造它,结果都是years
现在是一个集合,而不是一个迭代器。一个人可以(通常)枚举一个集合任意次(这肯定适用于list
s和tuple
s)。