3

dbから2つのクエリセットを取得しています:

all_locations = Locations.objects.all()[:5]
rating = Rating.objects.all()[:5]
return render_to_response('index.html',{'all':all_locations,'rating':rating},context_instance=RequestContext(request))

しかし、私はここで立ち往生しており、これら2つのクエリセットを1つのループでループする方法がわかりません。これは間違っています:

{% if all and rating %}
  {% for every in all and rating  %}
         {{every.locationname}}, {{every.rating_score}}
  {% endfor %}
{% endif %}
4

3 に答える 3

5

あなたは試すことができzip(all_locations, rating)ます。タプルのリストが生成されます。次に、それらをペアで繰り返すことができます。次に例を示します:(デモ

all_locations = ['ca','ny','fl']
ratings = ['best','great','good']
for (l,r) in zip(all_locations,ratings): 
   print l+':'+r 

出力

ca:best
ny:great
fl:good
于 2013-03-26T03:38:01.827 に答える
3

私もこの問題に遭遇しました。今、私はそれを修正しました。私がしているのは

new=tuple(zip(queryset1,queryset2))  
return render(request, 'template.html', {"n": new}).

view.pyで。

template.htmlでは、以下のリストの文に3つ使用しています。

{% for i in n %}

{% for j in i|slice:"0:1" %}

......operate queryset1

{% endfor %}
{% for z in i|slice:"1:2" %}

.....operate queryset2


{% endfor %}

{% endfor %}

It seems this method will fulfill your needs.
于 2018-08-11T09:48:38.550 に答える
1

これはうまくいくかもしれません:

{% with rating|length as range %}
    {% for _ in range %}
        {{ rating[forloop.counter] }}
        {{ location[forloop.counter] }}
    {% endfor %}
{% endwith %}

私はrating|length仕事に意志があるかどうかわかりません...あなたは次のようにrating|length|times' with定義されたtimes`フィルターを追加する必要があるかもしれません:

@register.filter(name='times') 
def times(number):
    return range(number)
于 2013-03-26T03:37:18.987 に答える