Pregunta

Me gustaría saber si puedo mostrar una vista dentro de otra vista con django.

Esto es lo que intenté 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)

El resultado se parece a lo que esperaba pero he tenido que reemplazar el valor de la solicitud con una cadena vacía. ¿Está bien o hay una mejor manera de hacerlo?

¿Fue útil?

Solución

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

si desea modularizar su función de vista, haga que las llamadas de subprocedimiento devuelvan cadenas y luego puede hacerlo de la manera que propone

Probablemente en su caso sería mejor poner un bucle que muestre filas en la plantilla, entonces no necesitará la vista secundaria 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 %}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top