Search code examples
pythonwebjinja2mkdocs

Variable modified in loop does not persist outside the loop


{% set title_org = nav_item.title.split(" ") %}
{% set title_mod = "" %}
{% for i in title_org %}
  {% if loop.index > 3 %}
    {% set title_mod = title_mod + ' ' + i %}
  {% endif %}
{% endfor %}
<a href="{{ nav_item.url }}" id="{{ id }}">{{ title_mod }}</a>

{{ title_mod }} is an empty string despite concatenated within the loop. How can I retrieve the updated {{ title_mod }} outside the for loop?


Solution

  • You should use array/dictionary like

    <p style="display:none;">
    {% set title_data = {'org': nav_item.title.split(" "), 'mod' : ""} %}
    {% for i in title_data.org %}
      {% if loop.index > 3 %}
        {{ title_data.update({'mod' : title_data.mod + ' ' + i}) }}
      {% endif %}
    {% endfor %}
    </p>
    <a href="{{ nav_item.url }}" id="{{ id }}">{{ title_data.mod }}</a>
    

    Looks like a dupe