django,如果条件在使用变量时不起作用,但在使用数字时则起作用

时间:2019-04-10 10:47:27

标签: python django

为什么此代码不起作用,我从views.py获取变量“数据”

当我用类似“ 1”的数字更改data.numrooms时,它工作正常,但是使用不起作用的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>

2 个答案:

答案 0 :(得分:0)

为什么不在视图中放置该逻辑并将其传递给模板,如下所示:

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

答案 1 :(得分:0)

类似于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 %}>

这可能会使代码更具可读性。