【问题标题】:Dictionary lookup in django templatesdjango 模板中的字典查找
【发布时间】:2017-11-07 13:20:08
【问题描述】:
{% for dispN0, tableDataSet0 in tabulatedTable.items %}
    {% for dispN in orderChanels %}     
        {% for antenaName, antenaLevel in tableDataSet0.{{dispN}}.items %}  
             <td>{{antenaName}}</td>    
        {% endfor %}
    {% endfor %}
{% endfor %}

这里 {{dispN}} 是整数数字将出现..如 36、42 等。如果我给 tableDataSet0.36.items 它工作正常。但我需要在 36 的地方使用倍数。

【问题讨论】:

  • 你需要自己编写一个模板过滤器。没有它们,您无法在 python 中使用其他变量访问变量。

标签: python django python-2.7 django-templates


【解决方案1】:

你需要自己写一个template filter来查找字典或对象的值:

在您的应用内的templatetags 文件夹中创建一个类似utils.py 的文件,如下所示:

app_dir/
├── __init__.py
├── models.py
  ...
├── templatetags/
│   ├── __init__.py  # required for python 2.7
│   └── utils.py
  ...
└── views.py

并用这个内容填充它:

from django import template

register = template.Library()

@register.filter
def lookup(value, key):
    return value.get(key, [])

现在您可以像这样在模板中使用此过滤器:

{% load utils %}

{% for dispN0, tableDataSet0 in tabulatedTable.items %}
    {% for dispN in orderChanels %}

        {% with tableData = tableDataSet0|lookup:dispN %}
            {% for antenaName, antenaLevel in tableData.items %}
                <td>{{antenaName}}</td> 
            {% endfor %}
        {% endwith %}

    {% endfor %}
{% endfor %}

了解更多

【讨论】:

  • 在哪里可以找到该选项?
猜你喜欢
  • 2011-08-12
  • 1970-01-01
  • 2014-03-27
  • 1970-01-01
  • 2011-12-21
相关资源
最近更新 更多