jinja的数据结构

时间:2016-12-06 08:18:12

标签: python data-structures jinja2

简介:我正在创建一个网站,显示我从其他网站上删除的事件。

问题: 目前我可以按日显示事件,但必须手动列出所有内容。不用于循环。

这是因为我有一个我相信的列表字典。 要获得今天发生的事件之一的标题语法是:

{{D.rows0[1].title}} 

其中D是字典 rows0是一个动态变量,代表日期,rows1rows2也存在。 rowsX包含titledatexyz等有关事件的信息。

会返回类似"谈论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循环,其中没有任何工作。

1 个答案:

答案 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循环所示。