简介:我正在创建一个网站,显示我从其他网站上删除的事件。
问题: 目前我可以按日显示事件,但必须手动列出所有内容。不用于循环。
这是因为我有一个我相信的列表字典。 要获得今天发生的事件之一的标题语法是:
{{D.rows0[1].title}}
其中D是字典
rows0
是一个动态变量,代表日期,rows1
,rows2
也存在。 rowsX
包含title
,date
,x
,y
,z
等有关事件的信息。
会返回类似"谈论x"
由于动态变量而无法迭代数据结构的原因(我试图在Jinja
中进行)。我对数据结构比较陌生,并没有意识到动态数据结构会导致这样的问题。
我已经搞砸了各种不同的for循环而放弃了。然后我决定将我的数据结构更改为数组字典,出现了将数组字典传递到html页面的问题。
结论。我的问题是,我应该找到一种方法来使用Jinja
迭代动态变量吗?找到一种方法将数组传递到.html
文件中,还是我做错了什么?
进一步解释
函数我从数据库中提取信息
d = {}
D = {}
def extractor1(n):
d["date" + str(n)] = (datetime.datetime.now() + datetime.timedelta(days=0)).date()
D["rows" + str(n)] = db.execute ("SELECT * FROM events WHERE date LIKE :date ORDER BY date", date = str(d["date" + str(n)]) +'%')
return d, D
这是我无法在Jinja中使用for循环迭代的数据结构。
数组的第二次函数尝试:
对于这个函数我从来没有尝试在Jinja中迭代它,因为我得到的错误。 D和d仍然是字典,我对数据结构日期和行可能有点创意,我尝试了一个数组和一个字典。但在尝试解决并遇到新问题后,我认为这可能不是最佳方式。
def extractor2(n):
d[date[n]] = (datetime.datetime.now() + datetime.timedelta(days=0)).date()
D[rows[n]] = db.execute ("SELECT * FROM events WHERE date LIKE :date ORDER BY date", date = str(str(d[date[n]])) +'%')
return d, D
Jinja代码只是一个不同的for循环,其中没有任何工作。
答案 0 :(得分:1)
你通过动态生成数字键在角落里画自己。你有一个序列,而不是一系列不同的数据;稍后再次提取这些密钥只会很痛苦。
使用列表而不是编号的字典键。您可以将日期和查询数据合并为每个条目一个元组:
results = []
for n in range(number_of_entries):
date = (datetime.datetime.now() + datetime.timedelta(days=0)).date()
rows = db.execute ("SELECT * FROM events WHERE date LIKE :date ORDER BY date", date = str(date) + '%')
results.append((date, rows))
然后遍历Jinja模板中的结果列表:
{% for date, rows in results %}
<tbody><tr><th colspan="3" class="event-date-header">{{ date }}</th></tr>
{% for row in rows %}
<tr>
<td class="event-foo"><a href="{{ row[0] }}">{{ row[1].title }}</a></td>
<td class="event-bar"><{{ row[2] }}</td>
<td class="event-baz"><{{ row[3] }}</td>
{% endfor %}
<tbody>
{% endfor %}
而不是元组,每个条目的字典也可以,但是你不能轻易地使用元组赋值,如上面的外部Jinja循环所示。