Получить вложенные элементы dict с помощью Jinja2 в колбе

для этого словаря с этим контроллером колбы

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 выше теста?

я решил свою проблему с помощью рендеринг python dict в Jinja2 / Werkzeug Блок шаблона должен быть

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

но мне все еще интересно, как получить доступ к дальнейшим вложенным словарям, и если это это самый умный способ создать простое меню.

2 ответов


Я думаю, вы хотите знать, как получить доступ к вложенному dict в шаблоне

если вы думаете, что я получил ваш вопрос

как правило, это способ доступа к вложенным элементам словаря в словаре.

если итераторы становятся вложенными дальше просто нужно увеличить 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>

вместо расширения ключа и значения в цикле вы также можете использовать ключ для ссылки на элемент в самом dict:

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