#django #variables #django-templates #custom-tag
Вопрос:
В моем шаблоне Django я хочу установить переменную для использования в 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-теге.
У вас есть идея, пожалуйста ?
Большое спасибо Ф.
Комментарии:
1. Почему вы пишете свой собственный тег для этого, почему бы его не использовать
{% with <var>=<val> %}
?2. Как я могу поступить с «с» ?. Он находится в блоке, и в моем коде есть алеардные блоки, такие как «цикл», «если» и т. Д.
3. Вы сталкиваетесь с этой проблемой, потому что вы не передаете данные в надлежащем формате в свой шаблон из своего представления. Ваше представление должно предоставлять ваши данные таким образом, чтобы шаблон мог легко их отображать.
4. @AbdulAzizBarkat : Я согласен 🙁
Ответ №1:
Вы можете использовать встроенный {% 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>
{% endwith %}
{% 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>
Комментарии:
1. Таким образом, после тега {% endwith %} переменная не задана. В моем примере я не могу вернуть значение 🙁
2. Но на данный момент в моем первом сообщении я не понимаю, почему значение после цикла пустое. Есть какие-нибудь идеи, пожалуйста ?. Спасибо
3. Скорее всего, это не ошибка кодирования, а логическая ошибка. Какое значение должно
selected_status
быть за пределами оператора if?