Я использую Django Version 2.1.7, jinja2 и пытаюсь перебрать список внутри словаря, используя forloop.counter0
в шаблоне Jinja.
Мой код Views.py :
def sample(request):
datas= ['value1','value2','value3'] #list
data = {'key1':'val1','key2':'val2','key3':'val3'} #dictionary
return render(request,'index.html',{'datalist':datas,'datadic':data})
Index.html (Джинджа):
{% for dic in datadic %}
{{ dic }}
{{ datalist.forloop.counter0 }}
{% endfor %}
<!-- datalist.0 is only possible after research ,but is it constant
for every iteration -->
Ожидаемый результат:
val1 value1
val2 value2
val3 value3
извините, моя ошибка, это образец данных, который я создал, я его отредактирую
Вы уверены, что используете Jinja? forloop.counter0
выглядит как Язык шаблонов Django для цикла. Джиндзя для цикла использует loop.index0
.
В соответствии с вашим кодом «данные» - это задавать и не могут повторяться как диктовать. Но в целом итерации должны выглядеть так
{% for key, value_list in dictionary.items() %}
{% for list_item in value_list %}
{{ list_item }}
{% endfor %}
{% endfor %}
спасибо за ответ, на самом деле я хочу перебрать список (который передается в списке данных) внутри словаря
Вы должны заархивировать свои данные в представлении и повторить их один раз в шаблоне.
zipped_data = zip(data.values(), datas)
return render(request, 'index.html', {'zipped_data': zipped_data})
...
{% for d1, d2 in zipped_data %}
{{ d1 }} {{ d2 }}
{% endfor %}
data
это не словарь, это набор. И фактический порядок итерации по набору не определен.