【问题标题】:django template language for loops用于循环的 django 模板语言
【发布时间】: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(..) 以使其可多次迭代。

标签: django django-templates jinja2


【解决方案1】:

reversed(..) 确实构造了一个元素集合:它是一个迭代器,所以这意味着它迭代某些东西(它产生元素),如果已经用尽了,没有(直接)方法可以重复枚举。

因此,您需要在某种集合中具体化迭代器,例如listtuple,例如:

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 现在是一个集合,而不是一个迭代器。可以(通常)枚举一个集合任意次数(这绝对适用于lists 和tuples)。

【讨论】:

    猜你喜欢
    • 2012-04-12
    • 2013-04-23
    • 2013-08-31
    • 2010-11-30
    • 2016-04-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多