2009-11-29 23 views
5

Me gustaría saber si puedo mostrar una vista dentro de otra vista con django.Django, mostrando una vista en otra vista?

Esto es lo que he intentado hacer:

def displayRow(request, row_id): 
    row = Event.objects.get(pk=row_id) 
    return render_to_response('row.html', {'row': row}) 

def listEventsSummary(request): 
    listEventsSummary = Event.objects.all().order_by('-id')[:20] 
    response = '' 
    for event in listEventsSummary: 
     response += str(displayRow('',event.id)) 
    return HttpResponse(response) 

La salida se parece a lo que yo esperaba, pero he tenido que sustituir el valor solicitud con una cadena vacía. ¿Está bien o hay una mejor manera de hacerlo?

Respuesta

4

http respuesta contiene encabezados junto con html, o cualquier otra cosa, por lo que no puede simplemente agregarlos como cadenas.

si quieres modularizar su función de vista, y luego tener sub-procedimiento llamadas devuelven cadenas y entonces usted puede hacerlo de la manera que usted propone

Probablemente, en su caso, sería mejor poner un bucle que muestra filas en la plantilla, entonces no necesitará la sub-vista y el bucle en su vista principal.

def listEventsSummary(request): 
    listEventsSummary = Event.objects.all().order_by('-id')[:20] 
    return render_to_response('stuff.html',{'events':listEventsSummary}) 

y en stuff.html

{% for event in events %} 
    <p>{{event.date}} and whatever else...</p> 
{% endfor %} 
+0

sí me preguntaba cómo quitar las cabeceras ;-) gracias por la explicación – Roch

Cuestiones relacionadas