2012-12-26 50 views
0

我有看起來像這樣的視圖: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] 

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

實施例(來自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'> 

而最後從Queryset中訪問一個項目:

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

現在,我的模板看起來是這樣的:

{% for key,value in funciones.items %} 
    {% regroup value by idcine as cine_list %} 
    <ul> 
     {% for c in cine_list %} 
     <li>{{ c.grouper }}</li> 
     <ul> 
      {% for item in cine_list %} 
       <li>{{key}}:{{item}}</li> 
      {% endfor %}  
     </ul></li> 
     {% endfor %} 
    </ul> 
    {% endfor %} 

輸出我這個得到:

Supercines Quicentro Sur 

espanol_3d_gtmax:{'list': [<Funcion: Supercines Quicentro Sur, Funcion #27: Intouchables>], 'grouper': <Cine: Supercines Quicentro Sur>} 

Supercines Quicentro Sur 

espanol_3d_vip:{'list': [<Funcion: Supercines Quicentro Sur, Funcion #27: Intouchables>], 'grouper': <Cine: Supercines Quicentro Sur>} 

Supercines Quicentro Sur 

espanol_3d_xd:{'list': [<Funcion: Supercines Quicentro Sur, Funcion #27: Intouchables>], 'grouper': <Cine: Supercines Quicentro Sur>} 

Multicines CCI 
espanol_3d:{'list': [<Funcion: Multicines CCI, Funcion #16: Intouchables>], 'grouper': <Cine: Multicines CCI>} 
espanol_3d:{'list': [<Funcion: Supercines Quicentro Sur, Funcion #27: Intouchables>], 'grouper': <Cine: Supercines Quicentro Sur>} 

Supercines Quicentro Sur 
espanol_3d:{'list': [<Funcion: Multicines CCI, Funcion #16: Intouchables>], 'grouper': <Cine: Multicines CCI>} 
espanol_3d:{'list': [<Funcion: Supercines Quicentro Sur, Funcion #27: Intouchables>], 'grouper': <Cine: Supercines Quicentro Sur>} 

Multicines Recreo 
subtitulada_vip:{'list': [<Funcion: Multicines Recreo, Funcion #28: Intouchables>], 'grouper': <Cine: Multicines Recreo>} 

Multicines CCI 
espanol:{'list': [<Funcion: Multicines CCI, Funcion #16: Intouchables>], 'grouper': <Cine: Multicines CCI>} 
espanol:{'list': [<Funcion: Supercines Quicentro Sur, Funcion #27: Intouchables>], 'grouper': <Cine: Supercines Quicentro Sur>} 

而且我會得到,而不是將是這樣的:

Supercines Quicentro Sur 
espanol_3d_gtmax:{'list': [<Funcion: Supercines Quicentro Sur, Funcion #27: Intouchables>], 'grouper': <Cine: Supercines Quicentro Sur>} 
espanol_3d_vip:{'list': [<Funcion: Supercines Quicentro Sur, Funcion #27: Intouchables>], 'grouper': <Cine: Supercines Quicentro Sur>} 
espanol_3d_xd:{'list': [<Funcion: Supercines Quicentro Sur, Funcion #27: Intouchables>], 'grouper': <Cine: Supercines Quicentro Sur>} 

Multicines CCI 
espanol_3d:{'list': [<Funcion: Multicines CCI, Funcion #16: Intouchables>], 'grouper': <Cine: Multicines CCI>} 
espanol:{'list': [<Funcion: Supercines Quicentro Sur, Funcion #27: Intouchables>], 'grouper': <Cine: Supercines Quicentro Sur>} 

Multicines Recreo 
subtitulada_vip:{'list': [<Funcion: Multicines Recreo, Funcion #28: Intouchables>], 'grouper': <Cine: Multicines Recreo>} 

任何想法,我應該改變以獲得我想要的輸出?

感謝

回答

2

爲了您regroup線試dictsort第一荷蘭國際集團它:

{% regroup value|dictsort:"idcine" by idcine as cine_list %} 
+0

您好,感謝您的建議,我嘗試過了,它似乎並沒有被髮揮作用。 – edu222

+0

我實際上最終不得不修改我的視圖返回來完成我所需要的。感謝您指點我正確的方向。 – edu222