Django模板中的字典查找

Gan*_*a U 5 python django django-templates python-2.7

{% for dispN0, tableDataSet0 in tabulatedTable.items %}
    {% for dispN in orderChanels %}     
        {% for antenaName, antenaLevel in tableDataSet0.{{dispN}}.items %}  
             <td>{{antenaName}}</td>    
        {% endfor %}
    {% endfor %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

这里{{dispN}}是整数,数字将如36、42等出现。如果我给tableDataSet0.36.items,它可以正常工作。但我需要在36处乘以倍数。

fec*_*ert 3

您需要编写自己的模板过滤器来查找字典或对象的值:

\n\n

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

\n\n
app_dir/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 models.py\n  ...\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 templatetags/\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py  # required for python 2.7\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 utils.py\n  ...\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 views.py\n
Run Code Online (Sandbox Code Playgroud)\n\n

并填写以下内容:

\n\n
from django import template\n\nregister = template.Library()\n\n@register.filter\ndef lookup(value, key):\n    return value.get(key, [])\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在您可以在模板中使用此过滤器,如下所示:

\n\n
{% load utils %}\n\n{% for dispN0, tableDataSet0 in tabulatedTable.items %}\n    {% for dispN in orderChanels %}\n\n        {% with tableData = tableDataSet0|lookup:dispN %}\n            {% for antenaName, antenaLevel in tableData.items %}\n                <td>{{antenaName}}</td> \n            {% endfor %}\n        {% endwith %}\n\n    {% endfor %}\n{% endfor %}\n
Run Code Online (Sandbox Code Playgroud)\n\n

阅读更多关于

\n\n\n