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

2024-09-27 07:32:50 发布

您现在位置:Python中文网/ 问答频道 /正文

为什么这个代码不起作用,我从视图.py你知道吗

当我改变的时候数据.numrooms对于像“1”这样的数字,它工作得很好,但它是有用的数据.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>

Tags: 数据no代码namepyform视图value
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 %}>

这可能会产生更可读的代码。你知道吗

为什么不把这个逻辑放到视图中,然后像这样传递给模板:

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

相关问题 更多 >

    热门问题