2012-06-13 30 views
1

我以下情形:馬克複選框

  • 的用戶負載home.html,選取5個複選框,然後點擊了提交的一個子集。
  • 用戶登錄stats.html,它將顯示與所選複選框相關的值,並將特定複選框標記爲CHECKED。

我路過一個叫「itemsToCheck」變量,以下內容爲stats.html模板:

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

如果這些數值應該幫我選擇這樣的特定的複選框:

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

你會怎麼做到的(使用模板語法,如checked={% something %}或jQuery)?

我是一個Django /網頁開發初學者,所以請讓我知道我的方法是否完全錯誤,以及是否有更清潔/更優雅的解決方案。

+2

你一定要嘗試使用[Django表單](https://docs.djangoproject.com/en/1.4/topics/forms/)來自動處理這些事情。 – Chewie

回答

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')] 

你就必須做一些更多的處理。

編輯: 還是在當字典鍵是字符串的情況:

或者只是準備itemsToCheck的格式來跳過轉換...

編輯2: 其實,我D使用此標籤:

@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 %} 
+0

很快,謝謝。你如何從這裏創建一個字典: itemsToCheck = [(k,v)for k,v in request.POST.items()if v =='on'] –

+0

@ Josephjun.Melettukunnel'items_to_check_dict = dict(itemsToCheck) ' – Chewie

+0

@ Josephjun.Melettukunnel:你不需要這種轉換。只需使用Request實例即可。 – Tisho