在呈现的HTML中标记复选框

时间:2012-06-13 12:24:14

标签: jquery python django

我有以下情况:

  • 用户加载home.html,选择五个复选框的子集,然后点击提交。
  • 用户登陆stats.html,会显示与所选复选框相关的值,并将特定复选框标记为已检查。

我将一个名为'itemsToCheck'的变量与以下内容一起传递给stats.html模板:

[(u'8', u'on'), (u'7', u'on')]

这些值应该帮助我选择这样的特定复选框:

<input type="checkbox" checked="yes" name="{{ MyModel.id }}"/>

你将如何实现(使用checked={% something %}或jQuery等模板语法?)

我是Django / web开发初学者,所以如果我的方法完全错误并且有更清洁/更优雅的解决方案,请告诉我。

1 个答案:

答案 0 :(得分:1)

如果你传递一个字典而不是列表,这将有效:

itemsToCheck = {7: 'on', 8: 'on'}

<input type="checkbox" {% if MyModel.id in itemsToCheck.keys %}checked="checked"{% endif %} name="{{ MyModel.id }}"/>

对于描述的列表:

[(8, 'on'), (9, 'on')]

你将不得不做更多的处理。

编辑: 或者在dict键是字符串的情况下:

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