2012-06-13 2 views
1

J'ai suivant le scénario:cases à cocher Marquer en HTML rendu

  • Les charges utilisateur home.html, sélectionne un sous-ensemble des cinq cases à cocher et clique sur soumettre.
  • L'utilisateur se positionne sur stats.html, qui affiche les valeurs associées aux cases à cocher sélectionnées ET marque les cases à cocher spécifiques comme VÉRIFIÉES.

Je passe une variable appelée 'itemsToCheck' avec le contenu suivant au modèle stats.html:

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

Lorsque ces valeurs doivent me aider à sélectionner les cases à cocher spécifiques comme celui-ci:

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

Comment voulez-vous accomplir cela (en utilisant une syntaxe de modèle comme checked={% something %} ou peut-être jQuery)?

Je suis un débutant de développement Django/web, alors s'il vous plaît laissez-moi savoir si mon approche est complètement faux et s'il y a une solution plus propre/plus élégante.

+2

Vous devriez certainement essayer d'utiliser [Django forms] (https://docs.djangoproject.com/fr/1.4/topics/forms/) pour obtenir automatiquement ce genre de choses. – Chewie

Répondre

1

Cela fonctionnera si vous passez l'un dict au lieu d'une liste:

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

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

Pour la liste décrite:

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

vous aurez à faire un peu plus de traitement.

EDIT: Ou dans le cas où les clés dict sont des chaînes:

Ou tout simplement préparer le itemsToCheck dans un format de sauter la conversion ...

EDIT 2: En fait, je d utiliser une balise ici:

@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]} 

puis dans checkbox.html:

{% for i in items %} 
<input type="checkbox" {% if i.checked %}checked="checked"{% endif %} name="{{ i.id }}"/> 
{% endfor %} 
+0

C'était rapide, merci. Comment créer un dict à partir de ceci: itemsToCheck = [(k, v) pour k, v dans request.POST.items() si v == 'on'] –

+0

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

+0

@ Josephjun.Melettukunnel: vous n'avez pas besoin de cette conversion. Utilisez simplement l'instance de requête. – Tisho