условие django if не работает при использовании переменной, но при использовании number оно работает

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

Это может сделать код более читаемым.