Python 在烧瓶中使用Jinja2获取嵌套的dict项

Python 在烧瓶中使用Jinja2获取嵌套的dict项,python,dictionary,flask,jinja2,Python,Dictionary,Flask,Jinja2,对于具有此Flask控制器的词典 projects = { 'life-calc':{'url':'life-calc', 'title': 'Life Calculator'}, 'text-game':{'url':'text-game', 'title':'Text Adventure'}, 'fill-it-up':{'url':'fill-it-up',

对于具有此Flask控制器的词典

projects = {
        'life-calc':{'url':'life-calc',
                    'title': 'Life Calculator'},
        'text-game':{'url':'text-game',
                    'title':'Text Adventure'},
        'fill-it-up':{'url':'fill-it-up',
                    'title':'Fill It Up'},
        'rock-paper-scissors':{'url':'rock-paper-scissors',
                    'title':'Rock, Paper, Scissors'},
        'bubble-popper':{'url':'bubble-popper',
                    'title':'Bubble Popper'}
            }


@app.route('/')
def index():
    return render_template("index.html",
                            projects = projects)
以及模板本身

    <h1>
        List of My Projects
    </h1>

    <ol>
        <li>
            <a href = "life-calc">Life Calculator</a>
        </li>
        <li>
            <a href = "text-game">Adventure Game</a>
        </li>
        <li>
            <a href = "fill-it-up">Fill It Up</a>
        </li>
        <li>
            <a href = "rock-paper-scissors">Rock Paper Scissors</a>
        </li>
        <li>
            <a href = "bubble-popper">Bubble Popper</a>
        </li>
    </ol>
    <p>test section below</p>
    <ol>
        {% for project in projects %}
        <li><a href = "{{ project['url'] }}">{{ project['title'] }}</a> </li>
        {% endfor %}
    </ol>

{% endblock %}

我的项目清单
  • 下面的测试部分

    {项目%中的项目为%}
  • {%endfor%} {%endblock%}
    如何访问dict中的项目以打印测试上方HTML中的项目列表

    在他的帮助下,我解决了自己的问题 模板块应该是

    {% for key, value in projects.iteritems() %}
    <li><a href={{value['url']}}>{{value['title']}}</a></li>
    {% endfor %}
    
    {%for key,projects.iteritems()中的值%}
    
  • {%endfor%}

    但是我仍然很好奇如何访问更多的嵌套字典,以及这是否是创建简单菜单的最聪明的方法。

    我想您想知道如何访问嵌套dict in模板

    如果你认为我明白你的问题

    通常,这是访问字典中嵌套字典项的方法

    如果iterables的嵌套越来越深,那么无论是list还是dict,您都必须增加
    forloop
    的深度级别。 这里我以自己的方式给出一个通用的例子,以供大家理解

    数据: jinja2中的迭代:
    {%for key,parent_dict.items()中的parent_dict_项%}
    {%对于键2,在父目录项中嵌套了值。项()%}
    
  • {%endfor%} {%endfor%}
    答复:

  • 除了扩展循环中的键和值,还可以使用键引用dict本身中的项:

    {% for project in projects %}
      <li><a href = "{{ projects[project].url }}">{{ projects[project].title }}</a> </li>
    {% endfor %}
    
    {%用于项目中的项目%}
    
  • {%endfor%}
    我知道这是两年前发布的,但是有没有办法用这种方法对嵌套的dict进行排序?我在parent_dict | dictsort%}中使用了类似于
    {%for k,v的东西
    ,但是使用这种方法我不能使用
    dictsort
    。有什么想法吗?你可以编写
    模板过滤器来实现它。它有django模板、jinja2等。谢谢,我来看看!:)使用.iteritems()进行迭代比使用.items()进行迭代更好
    
    {% for key,parent_dict_item in parent_dict.items() %}
       {% for key2, nested_value in parent_dict_item.items() %}
          <li><a href = "{{ nested_value }}">{{ nested_value }}</a> </li>
       {% endfor %}
    {% endfor %}
    
    <li><a href="val1">val1</a> </li>
    <li><a href="val2">val2</a> </li>
    <li><a href="val3">val3</a> </li>
    <li><a href="val4">val4</a> </li>
    
    {% for project in projects %}
      <li><a href = "{{ projects[project].url }}">{{ projects[project].title }}</a> </li>
    {% endfor %}