django模板基于密钥访问dict值

时间:2011-11-10 10:02:29

标签: django templates for-loop nested

在我的views.py中我获得了5个dicts,它们都像{date:value} 所有5个dicts都有相同的长度,在我的模板中,我想根据这些dicts获取一些url,公共字段是日期 - 就像在基于公共列加入5个表时在sql查询中所做的那样

在python中你会做类似的事情:

for key, value in loc.items():
    print key, loc[key], ctg[key], sctg[key], title[key], id[key]

但是在django模板中我能想出的就是:

{% for lock, locv in loc.items %}
    {% for ctgk, ctgv in ctg.items %}
        {% for subctgk, subctgv in subctg.items %}
            {% for titlek, titlev in titlu.items %}
                {% for idk, idv in id.items %}

                          {% ifequal lock ctgk %}
                            {% ifequal ctgk subctgk %}
                                {% ifequal subctgk titlek %}
                                    {% ifequal titlek idk %}

                                    <br />{{ lock|date:"d b H:i" }} - {{ locv }} - {{ ctgv }} - {{ subctgv }} - {{ titlev }} - {{idv }}
                                     .... {% endifequals & endfors %}

当然是丑陋的,需要花费很多时间才能呈现

现在我正在研究构建自定义标签,但我想知道你们是否有关于这个主题的任何反馈?

2 个答案:

答案 0 :(得分:0)

听起来像你需要使用除了对齐的dicts之外的东西。一个小班的词典怎么样,包含你想要的东西:

class MyThing:
  def __init__(self, loc, ctg, sctg, title, id):
    self.loc = loc
    self.ctg = ctg
    self.sctg = sctg
    self.title = title
    self.id = id

这会让您的模板代码不那么痛苦吗? (抱歉,如果我误解了这个问题 - 我很难跟上你的嵌套if!)。

答案 1 :(得分:0)

Django模板应该尝试用点作为字典查找来解析变量(如果变量是字典)。因此ctg.key等于ctg[key]。你试过这个:

{% for key, value in loc.items %}
  {{ key|date:"d b H:i" }} - {{ value }} - {{ ctg.key }} - {{ subctg.key }} - {{ title.key }} - {{ id.key }}