Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django, displaying a view in an another view?

I would like to know if I can display a view inside another view with django.

This is what I tried to do:

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)

The output looks like what I was expecting but I have had to replace the request value with an empty string. Is that fine or is there a better way to do it?

like image 401
Roch Avatar asked Oct 14 '22 12:10

Roch


1 Answers

http response contains headers along with html, or anything else, so you can't just add them up like strings.

if you want to modularize your view function, then have sub-procedure calls return strings and then you can do it the way you propose

Probably in your case it would be better to put a loop showing rows into the template, then you won't need the sub-view and the loop in your main view.

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

and in stuff.html

{% for event in events %}
    <p>{{event.date}} and whatever else...</p>
{% endfor %}
like image 188
Evgeny Avatar answered Oct 21 '22 05:10

Evgeny