2012-03-02 12 views
7

tengo una vista como esta:Diccionario de plantillas de Django

info_dict = [{u'Question 1': ['13365', '13344']}, {u'Question 2': ['13365']}, {u'Question 3': []}] 

for key in info_dict: 
    for k, v in key.items(): 
     profile = User.objects.filter(id__in=v, is_active=True) 
    for f in profile: 
     wanted_fields = ['job', 'education', 'country', 'city','district','area'] 
     profile_dict = {} 
     for w in wanted_fields: 
      profile_dict[f._meta.get_field(w).verbose_name] = getattr(f, w).name 

return render_to_response('survey.html',{ 
    'profile_dict':profile_dict, 
},context_instance=RequestContext(request)) 

y en la plantilla:

<ul> 
    {% for k, v in profile_dict.items %} 
     <li>{{ k }} : {{ v }}</li> 
    {% endfor %} 
</ul> 

Sólo tengo un diccionario en la plantilla. Pero el 4 diccionario podría estar aquí (porque info_dict) ¿Qué hay de malo a la vista?

Gracias de antemano

Respuesta

11

En su opinión, sólo se han creado una variable (profile_dict) para mantener los dicts perfil.

En cada iteración de su bucle for f in profile, está volviendo a crear esa variable y sobrescribiendo su valor con un nuevo diccionario. Por lo tanto, cuando incluye profile_dict en el contexto pasado a la plantilla, contiene el último valor asignado a profile_dict.

Si desea pasar cuatro profile_dicts a la plantilla, usted puede hacer esto en su opinión:

info_dict = [{u'Question 1': ['13365', '13344']}, {u'Question 2': ['13365']}, {u'Question 3': []}] 

# Create a list to hold the profile dicts 
profile_dicts = [] 

for key in info_dict: 
    for k, v in key.items(): 
     profile = User.objects.filter(id__in=v, is_active=True) 
    for f in profile: 
     wanted_fields = ['job', 'education', 'country', 'city','district','area'] 
     profile_dict = {} 
     for w in wanted_fields: 
      profile_dict[f._meta.get_field(w).verbose_name] = getattr(f, w).name 

     # Add each profile dict to the list 
     profile_dicts.append(profile_dict) 

# Pass the list of profile dicts to the template 
return render_to_response('survey.html',{ 
    'profile_dicts':profile_dicts, 
},context_instance=RequestContext(request)) 

Y luego en su plantilla:

{% for profile_dict in profile_dicts %} 
<ul> 
    {% for k, v in profile_dict.items %} 
     <li>{{ k }} : {{ v }}</li> 
    {% endfor %} 
</ul> 
{% endfor %} 
+0

que ha salvado la vida. Gracias – TheNone

+6

@TheNone: crikey, tu jefe es * realmente * estricto. Eres muy bienvenido. –

Cuestiones relacionadas