Django:为啥选项不会呈现为选中状态?
Posted
技术标签:
【中文标题】Django:为啥选项不会呈现为选中状态?【英文标题】:Django: Why won't the option render as selected?Django:为什么选项不会呈现为选中状态? 【发布时间】:2019-02-16 02:33:26 【问题描述】:已编辑:
在我的 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,但两个标签都没有“选中”,下拉选项 也没有。
所以我已经按照下面赞成的答案中的建议进行了更改,并重新启动了浏览器并清除了缓存,但仍然没有成功。
【问题讨论】:
这里的value
是什么?你能把你传递给渲染的字典的repr(..)
传给你吗?
@WillemVanOnsem 专业列表的repr是一个SpecialtyListResult对象的列表,每个对象只是一个整数specialId和一个字符specialName
【参考方案1】:
你需要改变:
% if value == specialtyId %
收件人:
% if s.specialtyId == specialtyId %
Value
这里无事。
edit:如果还是不行,检查s.specialtyId
和specialtyId
是否可以比较(例如:字符串2不等于整数2)。
【讨论】:
您重新启动并刷新没有缓存的html?【参考方案2】:虽然@Bestasttung 的回答是正确的,但不足以解决问题。我试过这个:
% if s.specialtyId == 2 %
这立即使第二个,并且只有第二个选项被选中。那时我意识到不知何故
% if s.specialtyId == specialtyId %
从来都不是真的,而且原来是因为不同的数据类型。我将字典中包含的类更改为 Charfield
而不是 IntegerField
class SpecialtyListResult:
specialtyId = models.CharField()
specialtyName = models.CharField(max_length=40)
然后将数据库游标的填充方式改为字符串类型:
for row in curs:
slr = SpecialtyListResult()
slr.specialtyId = str(row[0])
slr.specialtyName = row[1]
list_specialties.append(slr)
现在可以使用了。
【讨论】:
以上是关于Django:为啥选项不会呈现为选中状态?的主要内容,如果未能解决你的问题,请参考以下文章
Django Admin ForeignKey字段小部件选项和不一致的默认值
选中Tab控件单击事件,点击tab头,定位到导航栏的选项,为选中状态 ,DevExpress.XtraNavBar.NavBarControl 导航控件定位或选中状态 另导航的选项为选中状态.(代码