用于循环的 django 模板语言
Posted
技术标签:
【中文标题】用于循环的 django 模板语言【英文标题】:django template language for loops 【发布时间】:2019-02-01 08:00:03 【问题描述】:所以我有一个使用模板变量的 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)
【问题讨论】:
这可能是因为它不是一个列表,而是一个生成器。 Python 中的生成器会传递一次 的元素。但是您需要显示生成years
的视图才能确定。
类类型是reversed(..)
确实是一个生成器。您需要将其具体化(例如,将其转换为list(..)
以使其可多次迭代。
【参考方案1】:
reversed(..)
确实不构造了一个元素集合:它是一个迭代器,所以这意味着它迭代某些东西(它产生元素),如果已经用尽了,没有(直接)方法可以重复枚举。
因此,您需要在某种集合中具体化迭代器,例如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)
或者我们可以通过逆向 range(..)
对象本身来构造list
,它只需要枚举一次:
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)。
【讨论】:
以上是关于用于循环的 django 模板语言的主要内容,如果未能解决你的问题,请参考以下文章
Django 模板语言:使用带有 else 的 for 循环