【问题标题】:django templates accessing a dict value based on keydjango 模板根据键访问 dict 值
【发布时间】:2011-11-10 10:02:28
【问题描述】:

在我的 views.py 中,我获得了 5 个字典,它们都类似于 {date:value} 所有 5 个字典具有相同的长度,在我的模板中,我想根据这些字典获取一些 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 %}

这当然是丑陋的,需要很多时间来渲染

现在我正在考虑构建一个自定义标签,但我想知道你们是否对此主题有任何反馈?

【问题讨论】:

  • 使用自定义标签对我来说似乎更好。也许 Jinja2 可以帮助你,但我不确定......
  • 我创建了一个自定义标签,它执行 dict.get(key),这正是我在模板中需要的!

标签: django templates for-loop nested


【解决方案1】:

听起来你需要使用对齐字典以外的东西。一个包含你想要的东西的小类的字典怎么样:

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

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

【讨论】:

  • 要理解 ifs 考虑 5 个具有这些值的字典:{1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'x' , 6: 'aa'} 和 ifs 允许打印出 dict1[1] dict2[1] .. dict5[1] 和 dict1[2] dict2[2] .. dict5[2] 等
  • 感谢您的想法,但我创建了一个自定义标签,它创造了奇迹:)
【解决方案2】:

Django 模板应该尝试使用 dot 作为字典查找来解析变量(如果变量是字典)。所以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 }}

【讨论】:

  • 不,它不起作用...最好的办法是根据您的需要创建一个标签或过滤器...我创建了一个标签,但现在我发现过滤器本来可以更好
猜你喜欢
  • 1970-01-01
  • 2019-01-08
  • 2013-10-27
  • 2016-01-16
  • 2012-06-07
  • 2021-04-10
  • 2019-11-24
  • 1970-01-01
  • 2021-07-11
相关资源
最近更新 更多