Пользовательский тег для установки переменной в шаблоне Django. Вырывание значения из контекста?
В моем Django Template я хочу установить переменную, чтобы использовать ее в html-теге. Но, когда я выхожу из цикла for, переменная пуста :(
{% load custom_template_tag %}
<select>
    <option value=""></option>
    {% for a_status in status %}
        {% for r in all_status_ressources %}
            {% if a_ressource.id == r.0 and a_status.name == r.1 %}
                {% setvar "selected" as selected_status %}
                id ressource : {{ r.0 }}, name status : {{ r.1 }} -> [{{ selected_status }}]<br>
            {% endif %}
                selected_status : "{{ selected_status }}"
        {% endfor %}
        end loop ---------> selected_status : "{{ selected_status }}"
        <option value="{{ a_status.id }}" selected="{{ selected_status }}">{{ a_status.name }}</option>
    {% endfor %}
</select>
Сам пользовательский тег :
from django import template
register = template.Library()
@register.simple_tag
def setvar(val=None):
    return val
А теперь отладочная трассировка :
selected_status : ""
id ressource : 2, name status : "my personnal status" -> [selected]
selected_status : "selected"
selected_status : "selected"
selected_status : "selected"
selected_status : "selected"
selected_status : "selected"
selected_status : "selected"
selected_status : "selected"
selected_status : "selected"
selected_status : "selected"
selected_status : "selected"
selected_status : "selected"
selected_status : "selected"
selected_status : "selected"
selected_status : "selected"
end loop ---------> selected_status : ""
Итак, когда я выхожу из цикла for, переменная не устанавливается для использования в html-теге.
У вас есть идея, пожалуйста?
Большое спасибо F.
Вы можете использовать встроенный тег {% with <var>=<val> %}:
Что-то вроде:
template.html
<select>
  <option value=""></option>
  {% for a_status in status %}
    {% for r in all_status_ressources %}
      {% if a_ressource.id == r.0 and a_status.name == r.1 %}
         {% with selected_status="selected" %}
           id ressource : {{ r.0 }}, name status : {{ r.1 }} -> [{{selected_status }}]<br>
      {% endif %}
      selected_status : "{{ selected_status }}"
    {% endfor %}
    end loop ---------> selected_status : "{{ selected_status }}"
    <option value="{{ a_status.id }}" selected="{{ selected_status }}">{{a_status.name }}</option>
  {% endfor %}
</select>