Почему нельзя использовать цифры для ссылки на словарь в Django - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь отобразить страницу со словарем, который был создан с использованием цикла, и, пытаясь сослаться на него в шаблоне (.html), он печатает число независимо от значения для этого ключа

view.py

dicti={}
key = range(len(OPTIONS)) # a tuple
for i in key:        
    dicti[i] = polls_model.objects.filter(options=i).count()
dicti.update({'len_of_key' : key})
print(dicti)
return render(request,'polls/thanks.html', dicti)

при печати {0: 1, 1: 1, 2: 0, 3: 0, 'len_of_key': range (0, 4)}

thanks.html

<div class="row">
    {% for i in len_of_key %}
        <div class="column">
            <div class="card">
                <h3>
                    {{ i }}
                </h3>
            </div>
        </div>            
    {% endfor %}
</div>

и когда это запустится, я получу 1,2,3,4 в моем выводе.

небольшая помощь будет оценена, пожалуйста

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Немного сложно обернуть мою голову вокруг твоего вопроса.Из того, что я понял, вы хотите узнать, сколько раз присутствует опция.

Во-первых, нет смысла делать range(len(OPTIONS)) Вам лучше с

for i, key in enumerate(OPTIONS):
    dicti[i] = polls_model.objects.filter(options=i).count()

НоЯ сомневаюсь, что вам на самом деле нужно фильтровать ваши опросы на основе индекса вашей ценности.Поэтому вы можете захотеть изменить .filter(options=i) на .filter(options=key)

Далее, значения, которые вы получите от модели, не следует создавать для них отдельные ключи в словаре.Определенно нет, если порядок важен.

Лучше создать один ключ, в котором вы сохраните результаты, это также означает, что перечисление устарело:

dicti = {}
dicti['polls'] = []

for key in OPTIONS:
    dict['polls'].append(polls_model.objects.filter(options=key).count())

return render(request, 'polls/thanks.html', dicti)

Наконец, в шаблоне ваш код выглядит довольнохорошо, но вы должны перебрать ключ, который мы только что создали:

<div class="row">
    {% for poll in polls %}
        <div class="column">
            <div class="card">
                <h3>
                    {{ poll }}
                </h3>
            </div>
        </div>            
    {% endfor %}
</div>

Это должно вернуть количество ваших опросов в шаблоне.Если вам нужно где-то показать длину опросов, вы можете использовать {{ polls|length }}.

0 голосов
/ 20 декабря 2018

Переведите словарь в шаблон Django.

 <div class="row">
        {% for i, j in dicti.items %}
            <div class="column">
                <div class="card">
                    <h3>
                        {{ j }}
                    </h3>
                </div>
            </div>            
        {% endfor %}
    </div>
0 голосов
/ 20 декабря 2018

Попробуйте сделать:

return render(request,'polls/thanks.html', {'dicti': dicti})

{% for key, value in dicti.items %}
    <div class="column">
        <div class="card">
            <h3>
                {{ value }}
            </h3>
        </div>
    </div>            
{% endfor %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...