我有以下场景:
- 用户加载
home.html
,选择五个复选框的子集,然后单击提交。 - 用户登陆
stats.html
,它将显示与所选复选框相关的值,并将特定复选框标记为“已检查”。
我将一个名为“itemsToCheck”的变量传递给 stats.html
模板,其中包含以下内容:
[(u'8', u'on'), (u'7', u'on')]
这些值应该帮助我选择像这样的特定复选框:
<input type="checkbox" checked="yes" name="{{ MyModel.id }}"/>
您将如何实现这一点(使用诸如 checked={% some %}
或 jQuery 之类的模板语法)?
我是 Django/web 开发初学者,所以请让我知道我的方法是否完全错误以及是否有更干净/更优雅的解决方案。
最佳答案
如果您传递字典而不是列表,这将起作用:
itemsToCheck = {7: 'on', 8: 'on'}
<input type="checkbox" {% if MyModel.id in itemsToCheck.keys %}checked="checked"{% endif %} name="{{ MyModel.id }}"/>
对于所描述的列表:
[(8, 'on'), (9, 'on')]
您必须进行更多处理。
编辑: 或者当字典键是字符串时:
{% if MyModel.id|stringformat:"s" in itemsToCheck.keys %}
或者只是以某种格式准备 itemsToCheck 以跳过转换...
编辑2: 实际上,我会在这里使用标签:
@register.inclusion_tag('checkbox.html')
def my_checkboxes(request, items):
return {"items": [{'id': i.id, 'checked': request.POST[str(i.id)] == 'on'} for i in items]}
然后在checkbox.html中:
{% for i in items %}
<input type="checkbox" {% if i.checked %}checked="checked"{% endif %} name="{{ i.id }}"/>
{% endfor %}
关于jquery - 在渲染的 HTML 中标记复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11014759/