Note that there are some explanatory texts on larger screens.

plurals
  1. PODjango Template print items from a Dictionary of Querysets
    text
    copied!<p>I have a view that looks like this:</p> <pre><code>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)) </code></pre> <p>And my template looks like this:</p> <pre><code>{% for key,value in funciones.items %} {{key}} {% for queryset in value %} {% for item in queryset %} {{item}} &lt;br/&gt; {% endfor %} {% endfor %} {% endfor %} </code></pre> <p>Example(from ipdb):</p> <pre><code>(Pdb) funciones {'espanol_3d_gtmax': [&lt;Funcion: ted, Funcion #15: Sebas el Genio&gt;], 'espanol_3d_vip': [&lt;Funcion: ted, Funcion #15: Sebas el Genio&gt;], 'espanol_3d_xd': [&lt;Funcion: ted, Funcion #15: Sebas el Genio&gt;], 'espanol_xd': [&lt;Funcion: ted, Funcion #15: Sebas el Genio&gt;], 'espanol_vip': [&lt;Funcion: ted, Funcion #15: Sebas el Genio&gt;], 'espanol_3d': [&lt;Funcion: ted, Funcion #15: Sebas el Genio&gt;], 'espanol': [&lt;Funcion: American Junkie, Funcion #9: Sebas el Genio&gt;, &lt;Funcion: ted, Funcion #15: Sebas el Genio&gt;], 'espanol_gtmax': [&lt;Funcion: ted, Funcion #15: Sebas el Genio&gt;]} &lt;type 'dict'&gt; </code></pre> <p>Now accessing a value:</p> <pre><code>funciones['espanol'] [&lt;Funcion: American Junkie, Funcion #9: Sebas el Genio&gt;, &lt;Funcion: ted, Funcion #15: Sebas el Genio&gt;] type(funciones['espanol']) &lt;class 'django.db.models.query.QuerySet'&gt; </code></pre> <p>And finally accessing an item from the Queryset:</p> <pre><code>(Pdb) funciones['espanol'][0] &lt;Funcion: American Junkie, Funcion #9: Sebas el Genio&gt; type(funciones['espanol'][0]) &lt;class 'core_app.models.Funcion'&gt; </code></pre> <p>The problem is that the template throws this error:</p> <pre><code>'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 </code></pre> <p>Any ideas, anyone?</p> <p>Thanks</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload