web-dev-qa-db-fra.com

Obtenez des éléments de dict imbriqués en utilisant Jinja2 dans Flask

pour ce dictionnaire avec ce contrôleur 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)

et le modèle en tant que tel

    <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 %}

Comment puis-je accéder aux éléments du dict pour imprimer une liste de mes projets comme dans le HTML au dessus du test?

J'ai résolu mon propre problème avec l'aide de Rendu d'un python dict dans Jinja2/Werkzeug Le bloc de modèle doit être

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

Mais je suis toujours curieux de savoir comment accéder à d'autres dictionnaires imbriqués, et si c'est la façon la plus intelligente de créer un menu simple.

13
MattO

Je pense que vous voulez savoir comment accéder au dict imbriqué dans le modèle

Si vous pensez que j'ai votre question

Généralement, c'est la façon d'accéder aux éléments de dictionnaire imbriqués dans le dictionnaire.

Si les itérables sont de plus imbriqués, il vous suffit d'augmenter le niveau de profondeur forloop que ce soit la liste ou le dict.

Ici, je donne juste un exemple générique à ma façon pour votre compréhension

Les données:

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

itération dans 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 %}

Répondre:

<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>
22
Nava

Au lieu d'étendre la clé et la valeur dans la boucle, vous pouvez également utiliser la clé pour référencer l'élément dans le dict lui-même:

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