【问题标题】:Iterate over one key's dictionary in another dictionary in a Django template在 Django 模板的另一个字典中迭代一个键的字典
【发布时间】:2015-09-28 01:56:09
【问题描述】:

我有一本如下所示的字典:

timeTables = {
        'today': {'date_start': datetime.now(), 'date_end': None},
        'yesterday': {'date_start': (datetime.now() - timedelta(days=1)), 'date_end': None},
        'week': {'date_start': (datetime.now() - timedelta(weeks=1)), 'date_end': datetime.now()},
        'month': {'date_start': (datetime.now() - timedelta(days=30)), 'date_end': datetime.now()},
    }

我想在 Django 模板的 for 循环中输出 today 键字典元素。

我可以通过以下方式在普通 Python 中完成此操作:

for key, value in timeTables['today'].items():
        print key, value

但是同样的事情在 Django 模板中是行不通的。

这样做会报错:

{% for key, value in data['today'].items %}
    {{ key }} {{ value }}
{% endfor %}

TemplateSyntaxError at /
Could not parse the remainder: '['today'].items' from 'data['today'].items'

【问题讨论】:

  • 你试过data.today.items吗?
  • @Fogest:尽管受到 Python 语法的启发,但 Django 的模板语言不是 Python。 FWIW Django 的模板语言记录在这里:docs.djangoproject.com/en/1.8/ref/templates/language
  • @Holt 如果你愿意,你可以把它作为答案:)

标签: python django dictionary django-templates


【解决方案1】:

试试这个: 如果您只想要只有“今天”键的字典字段,那么只需从视图 {'data': data['today']} 发送 data['today'] ,然后将其渲染为:

{% for key, value in data.items %}
    {{ key }} {{ value }}
{% endfor %}

如果你想发送整个字典,那么,

{% for key, value in data.items %}
    {% for k,v in value.items %}
     {{k}} {{v}}
    {% endfor %}
{% endfor %}

【讨论】:

  • 我认为这不能回答问题。第一个解决方案涉及我必须发送一个完全不同的字典,这不是我要的,而第二个解决方案似乎只是遍历整个字典,而不仅仅是一个键。
【解决方案2】:

在 Django 模板中,不能使用 data['today'] 语法来访问字典的值,需要使用 . (data.today):

{% for key, value in data.today.items %}
    {{ key }} {{ value }}
{% endfor %}

【讨论】:

    猜你喜欢
    • 2019-09-01
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-27
    • 1970-01-01
    相关资源
    最近更新 更多