#python #django
#python #django
Вопрос:
почему этот код не работает, я получаю переменную «данные» из views.py
когда я меняю data.numrooms на число, подобное ‘1’, оно работает хорошо, но использует data.numrooms, который не работает
<select class="form-control" name="numadults">
<option value=''>No. of Adult</option>
{% for i in range %}
{% if data.numadults == i %}
<option value="{{ i }}" selected>{{ i }}</option>
{% else %}
<option value="{{ i }}">{{ i }}</option>
{% endif %}
{% endfor %}
</select>
Комментарии:
1. Где вы используете
data.numrooms
? Я вижу толькоdata.numadults
.2. что такое
range
? и покажите намdata
Ответ №1:
Почему бы не поместить эту логику в представление и передать ее в шаблон следующим образом:
# view
adult_range = list(map(lambda x: (x, True) if x == data.numadults else (x, False), range(1,10))
# Template
<option value=''>No. of Adult</option>
{% for i, selected in adult_range %}
{% if selected %}
<option value="{{ i }}" selected>{{ i }}</option>
{% else %}
<option value="{{ i }}">{{ i }}</option>
{% endif %}
{% endfor %}
Ответ №2:
Аналогично решению ruddra, самый простой способ добиться этого, вероятно, выполнить основную часть логики в представлении:
adults = [(element, element.number == data.numadults) for element in adult_list]
Это даст вам список двух кортежей (<adult object>, <boolean>)
, где логическое значение представляет условие, которое вы пытаетесь использовать в шаблоне, чтобы решить, использовать ли selected
атрибут.
Затем в шаблоне вы можете основывать свое условие исключительно на этом логическом значении:
<option value=''>No. of Adult</option>
{% for i, selected in adult_range %}
{% if selected %}
<option value="{{ i }}" selected>{{ i }}</option>
{% else %}
<option value="{{ i }}">{{ i }}</option>
{% endif %}
{% endfor %}
Обратите внимание, что вы также можете оценить условие встроенным, в теге html, вот так:
<option value="{{ i }}" {% if selected %} selected {% endif %}>
Это может сделать код более читаемым.