Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “Django模板”;“用于循环”;工作不正常_Python_Django_Dictionary - Fatal编程技术网

Python “Django模板”;“用于循环”;工作不正常

Python “Django模板”;“用于循环”;工作不正常,python,django,dictionary,Python,Django,Dictionary,我正在尝试构建模板标记,使用settings.py中的字典来构建菜单 我将此作为模板的一部分 {% for menu_item in menu %} <li class="single-link"><a href="{{ menu_item.url }}" title="{{ menu_item.caption }}">{{ menu_item.caption }}</a></li> {% endfor %} {{menu.start.

我正在尝试构建模板标记,使用
settings.py
中的字典来构建菜单

我将此作为模板的一部分

{% for menu_item in menu %}
     <li class="single-link"><a href="{{ menu_item.url }}" title="{{ menu_item.caption }}">{{ menu_item.caption }}</a></li>
{% endfor %}
{{menu.start.caption}
工作正常,但是在我的for循环中,
菜单项只包含
'keywords'
'start'
'flipa'
,使用
根本不起作用

有人知道我做错了什么吗?


免责声明:我只使用django和python一周了

在Django模板中,就像在标准Python中一样,在字典上使用
for
只需循环键即可。您需要使用
.items()
方法:

{% for key, value in menu.items %}
    <li class="single-link"><a href="{{ value.url }}" title="{{ value.caption }}">{{ value.caption }}</a></li>
{% endfor %}
{%用于键,menu.items%中的值]
  • {%endfor%}
    (虽然我意识到您实际上并没有在这里使用键,所以您可以在menu.values中对value使用


    另外,请注意,字典在任何情况下都可能不是适合您的项目的容器,因为您无法定义排序。正如armonge所建议的,列表可能更好。

    你需要的是让菜单成为列表而不是字典


    上下文['menu']=[{'url':'#','caption':'test'},{'url':'#','caption':'test'},{'url':'#','caption':'test'}]

    在这种情况下如何使用列表?仅仅将上下文更改为列表而不是字典是行不通的。我不相信列表有items或values函数?有了列表,你只需对其进行迭代即可:
    对于菜单中的item
    。这不起作用,可能是因为列表实际上是使用getattr从settings.py检索的?不管怎样,我是个可怕的白痴。(我只是把所有的东西都放在一个列表项中)谢谢你的建议使用列表。
    {% for key, value in menu.items %}
        <li class="single-link"><a href="{{ value.url }}" title="{{ value.caption }}">{{ value.caption }}</a></li>
    {% endfor %}