Dictionary in django template

I have a view like this:

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

and in the template:

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

I have only one dictionary in the template. But there can be 4 dictionaries (since info_dict) What is wrong?

Thanks in advance

+7
source share
1 answer

In your opinion, you only created one variable ( profile_dict ) to hold the dicts profile.

At each iteration of your for f in profile loop, you re-create this variable and overwrite its value with a new dictionary. Therefore, when you include profile_dict in the context passed to the template, it holds the last value assigned to profile_dict .

If you want to pass four profile_dicts templates to a template, you can do this in your view:

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

And then in your template:

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

All Articles