【问题标题】:Get nested dict items using Jinja2 in Flask在 Flask 中使用 Jinja2 获取嵌套的 dict 项
【发布时间】:2014-09-03 20:44:51
【问题描述】:

使用这个 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 %}

如何访问 dict 中的项目以打印我的项目列表,如测试上方的 HTML 中一样?

我在Rendering a python dict in Jinja2 / Werkzeug 的帮助下解决了我自己的问题 模板块应该是

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

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

【问题讨论】:

    标签: python dictionary flask jinja2


    【解决方案1】:

    我想你想知道如何访问模板中的嵌套字典

    如果你认为我有你的问题

    一般来说,这是访问字典中嵌套字典项的方式。

    如果可迭代对象进一步嵌套,则无论是列表还是字典,您都必须增加 forloop 深度级别。

    这里我只是以我自己的方式给出一个通用示例,以供您理解

    数据:

    parent_dict = {1: {'A':'val1','B':'val2'}, 2:{'C':'val3','D':'val4'}}
    

    jinja2 中的迭代:

    {% 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 k, v in parent_dict|dictsort %} 之类的东西,但使用这种方法我无法使用dictsort。有什么想法吗?
    • 你可以写template filters来做。它在 django 模板、jinja2 等中可用。refer
    • 谢谢,我去看看! :)
    • 使用 .iteritems() 进行迭代优于 .items()
    【解决方案2】:

    除了在循环中扩展key和value,你还可以使用key来引用dict本身中的item:

    {% for project in projects %}
      <li><a href = "{{ projects[project].url }}">{{ projects[project].title }}</a> </li>
    {% endfor %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多