如何在Django模板

时间:2017-11-24 10:18:22

标签: django django-templates

我使用自定义窗口小部件来修改窗口小部件模板的上下文(添加更多信息)。

上下文:

'selected': [[3, 9], [3, 4, 7, 6]], 'depth_levels': {0: [{'name': 'Category A', 'value': 3, 'depth': 0, 'parent_id': None, 'children': [4, 9]}, {'name': 'Category B', 'value': 8, 'depth': 0, 'parent_id': None, 'children': []}], 1: [{'name': 'Category A_1', 'value': 4, 'depth': 1, 'parent_id': 3, 'children': [5, 7]}

{% for path in widget.selected %}
        {% for selected in path %}

            {% for level in widget.depth_levels.forloop.counter0 %}
                {{ level }}

            {% endfor %}
        {% endfor %}
    {% endfor %}

首先,我循环选择(路径)和内部数组(选中)。 我想使用{{forloop.counter0}}作为depth_levels的键。

问题:{{widget.depth_levels.forloop.counter0}}不会返回任何内容。

forloop.counter不用作列表的索引,但它用作字典的键。

使用'。'访问是Django模板访问字典的默认方式*使用'0','1' - {{widget.depth_levels.0}} - 等而不是forloop.counter0它可以工作。

再次使用自定义模板标记会出现问题,因为访问位于for内,无法在{{}}内使用:

{% for level in widget.depth_levels.forloop.counter0 %}

访问depth_levels所需的密钥是0到selected内每个数组的长度,示例中的'path'数组。

所选数组中的值告诉我稍后添加属性的位置与depth_levels的键无关。

我的最终目标是访问阵列中字典中的namevalue

2 个答案:

答案 0 :(得分:2)

您可以添加这样的过滤器(了解更多:https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/#writing-custom-template-filters):

@register.filter
def value_by_key(d, key):    
    return d[key]

然后像这样使用它:

% for path in widget.selected %}
    {% for level in widget.depth_levels|value_by_key:path|length %}
        {{ level }}
    {% endfor %}
{% endfor %}

答案 1 :(得分:0)

如果你的最终目标是访问数组中字典中的每个名称,那么你应该这样做。

php