Словарь в шаблоне Django - PullRequest
       2

Словарь в шаблоне Django

8 голосов
/ 02 марта 2012

У меня есть такой вид:

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

и в шаблоне:

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

У меня только один словарь в шаблоне. Но 4 словарь может быть здесь (потому что info_dict) Что не так с точки зрения?

Заранее спасибо

1 Ответ

12 голосов
/ 02 марта 2012

По вашему мнению, вы создали только одну переменную (profile_dict) для хранения диктов профиля.

На каждой итерации цикла for f in profile вы заново создаете эту переменную,и перезаписать его значение новым словарем.Поэтому, когда вы включаете profile_dict в контекст, переданный шаблону, он содержит последнее значение, присвоенное profile_dict.

Если вы хотите передать шаблону четыре профиля_дикта, вы можете сделать это по вашему мнению:

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

А потом в вашем шаблоне:

{% for profile_dict in profile_dicts %}
<ul>
    {% for k, v in profile_dict.items %}
        <li>{{ k }} : {{ v }}</li>
    {% endfor %}
</ul>
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...