Django:为什么选项不呈现为选中状态?

时间:2018-09-11 14:38:08

标签: html django django-templates

已编辑:

在我的html模板中,我有一个选择控件,并想基于变量{{specialtyId}}设置选择的选项。预期结果是将选择所选选项,但实际结果是未选择任何选项。

为了确保不仅仅是受到影响的select控件,我还使用了类似的循环来基于if生成带有“选定”或“未选定”的标签陈述测试。

代码如下:

<label>{{specialtyId}} was selected</label>
<br>
{% for s in specialties %}
    <label>{{s.specialtyId}} {{s.specialtyName}} {% if s.specialtyId == specialtyId %} selected {% else %} not selected {% endif %}</label><br>
{% endfor %}

<select class="form-control" id="specialtyId" name="specialtyId" required="True">
{% for s in specialties %}
    <option value="{{s.specialtyId}}" {% if s.specialtyId == specialtyId %} selected {% endif %}>{{s.specialtyName}}</option>
{% endfor %}
</select>

这里是实际选择的值,生成的标签和生成的下拉菜单的屏幕截图。即使specialtyId在输出2 was selected中显然是2,两个标签都没有被“选中”,下拉选项也没有enter image description here

因此,我已按照下面建议的答案进行了更改,然后重新启动浏览器并清除了缓存,但仍然没有成功。

2 个答案:

答案 0 :(得分:4)

您需要更改:

{% if value == specialtyId %}

收件人:

{% if s.specialtyId == specialtyId %}

Value与这里无关。

edit :如果仍然无法执行,请检查s.specialtyIdspecialtyId是否可以进行比较(例如:字符串2不等于整数2)。

答案 1 :(得分:0)

尽管@Bestasttung的回答是正确的,但这不足以解决问题。我尝试过:

<script type="text/javascript" src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/css/materialize.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/js/materialize.min.js"></script>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/css/materialize.min.css">


<div class="container">
  <br><br><br><br><br><br><br>
  <div class="col s12 m10 offset-m1 l6 offset-l3">

    <div class="row">
      <form action="" class="col s12 m8 offset-m2 l6 offset-l3">
        <div class="row">
          <div class="input-field">
            <input type=text name="bdate" id="bdate" class="datepicker" required>
            <label for="bdate">Birthday</label>
          </div>
        </div>
        <div class="row">
          <div class="input-field">
            <input name="email" id="email" type="text" class="validate">
            <label for="email">Email</label>
          </div>
        </div>
      </form>
    </div>

  </div>

立即选择了第二个,并且仅选择了第二个。那时我意识到,以某种方式

{% if s.specialtyId == 2 %}

从来都不是真的,事实证明是因为数据类型不同。我将字典中包含的类更改为{% if s.specialtyId == specialtyId %} 类型,而不是Charfield

IntegerField

然后将其由数据库游标填充的方式更改为字符串类型:

class SpecialtyListResult:
    specialtyId = models.CharField()
    specialtyName = models.CharField(max_length=40)

它现在可以工作。