2012-12-21 91 views
1

我有一個觀點,看起來像這樣:從查詢集的字典Django的模板打印項目

def CarteleraPeliculaToday(request, slugpelicula): 
    city = request.session["ciudad"] 
    today = (datetime.utcnow() - timedelta(hours=5)).date() # date: Ecuador time zone 
    pelicula = Pelicula.objects.get(slug=slugpelicula) 
    espanol_3d_gtmax = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Espanol", tipo_3d=1, gtmax=1) 
    espanol_3d = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Espanol", tipo_3d=1) 
    espanol_3d_vip = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Espanol", tipo_3d=1, vip=1) 
    espanol_3d_xd = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Espanol", tipo_3d=1, xd=1) 
    espanol_gtmax = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Espanol", gtmax=1) 
    espanol = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Espanol") 
    espanol_vip = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Espanol", vip=1) 
    espanol_xd = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Espanol", xd=1) 
    subtitulada_3d_gtmax = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Subtitulada", tipo_3d=1, gtmax=1) 
    subtitulada_3d = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Subtitulada", tipo_3d=1) 
    subtitulada_3d_vip = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Subtitulada", tipo_3d=1, vip=1) 
    subtitulada_3d_xd = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Subtitulada", tipo_3d=1, xd=1) 
    subtitulada_gtmax = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Subtitulada", gtmax=1) 
    subtitulada = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Subtitulada") 
    subtitulada_vip = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Subtitulada", vip=1) 
    subtitulada_xd = Funcion.objects.filter(fecha_inicio__lte=today, fecha_fin__gte=today, idpelicula__slug=slugpelicula, idciudad=city, visible=1, idioma="Subtitulada", xd=1) 

    #Creating a dictionary of all types of funciones querysets 
    funciones = {'espanol': espanol, 'subtitulada': subtitulada, 'espanol_3d': espanol_3d, 'subtitulada_3d': subtitulada_3d, 'espanol_3d_gtmax': espanol_3d_gtmax, 
'espanol_vip': espanol_vip, 'espanol_xd': espanol_xd, 'subtitulada_3d_gtmax': subtitulada_3d_gtmax, 'subtitulada_3d_vip': subtitulada_3d_vip, 'espanol_3d_vip': espanol_3d_vip, 'espanol_3d_xd': espanol_3d_xd, 'espanol_gtmax': espanol_gtmax, 
'subtitulada_3d_xd': subtitulada_3d_xd, 'subtitulada_gtmax': subtitulada_gtmax, 'subtitulada_vip': subtitulada_vip, 'subtitulada_xd': subtitulada_xd} 

    #Removing empty element from funciones dictionary 
    for x in list(funciones.keys()): 
     if not (funciones[x]).exists(): 
      del funciones[x] 
    #import pdb; pdb.set_trace() 

    context = {'pelicula': pelicula, 'funciones': funciones} 
    return render_to_response('cartelera-pelicula.html', context, context_instance=RequestContext(request)) 

而且我的模板看起來像這樣:

{% for key,value in funciones.items %} 
      {{key}} 
      {% for queryset in value %} 
       {% for item in queryset %} 
        {{item}} 
        <br/> 
       {% endfor %} 
      {% endfor %} 
     {% endfor %} 

例(從IPDB):

(Pdb) funciones 
{'espanol_3d_gtmax': [<Funcion: ted, Funcion #15: Sebas el Genio>], 'espanol_3d_vip': [<Funcion: ted, Funcion #15: Sebas el Genio>], 'espanol_3d_xd': [<Funcion: ted, Funcion #15: Sebas el Genio>], 'espanol_xd': [<Funcion: ted, Funcion #15: Sebas el Genio>], 'espanol_vip': [<Funcion: ted, Funcion #15: Sebas el Genio>], 'espanol_3d': [<Funcion: ted, Funcion #15: Sebas el Genio>], 'espanol': [<Funcion: American Junkie, Funcion #9: Sebas el Genio>, <Funcion: ted, Funcion #15: Sebas el Genio>], 'espanol_gtmax': [<Funcion: ted, Funcion #15: Sebas el Genio>]} 
<type 'dict'> 

現在訪問的值:

funciones['espanol'] 
[<Funcion: American Junkie, Funcion #9: Sebas el Genio>, <Funcion: ted, Funcion #15: Sebas el Genio>] 
type(funciones['espanol']) 
<class 'django.db.models.query.QuerySet'> 

最後訪問從查詢集一個項目:

(Pdb) funciones['espanol'][0] 
<Funcion: American Junkie, Funcion #9: Sebas el Genio> 
type(funciones['espanol'][0]) 
<class 'core_app.models.Funcion'> 

的問題是,模板引發此錯誤:

'Funcion' object is not iterable 
Request Method: GET 
Request URL: //127.0.0.1:8000/cartelera/sebas-el-genio/ 
Django Version: 1.4.1 
Exception Type: TypeError 
Exception Value:  
'Funcion' object is not iterable 

任何想法,任何人嗎?

謝謝

回答

1

你有一個太多的循環級別。從第一個for-loop'value'將包含查詢集對象。第二個for循環將迭代每個查詢集合的結果,即'queryset'循環變量將包含函數模型的各個實例。 「查詢集中的項目」的第三個for循環是無關緊要的。

+0

嘿,謝謝。可以問你一個關於在我的模板上重組這些東西的問題,還是應該打開一個新的問題? – edu222