2009-11-29 8 views
5

Je voudrais savoir si je peux afficher une vue à l'intérieur d'une autre vue avec django.Django, affichant une vue dans une autre vue?

C'est ce que j'ai essayé de le faire:

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 sortie ressemble à ce que je m'y attendais, mais j'ai dû remplacer la valeur de demande avec une chaîne vide. Est-ce bien ou y a-t-il une meilleure façon de le faire?

Répondre

4

La réponse http contient des en-têtes avec html ou toute autre chose, donc vous ne pouvez pas les ajouter comme des chaînes.

si vous voulez modularisation votre fonction de vue, alors les appels sous-procédure renvoient des chaînes et vous pouvez le faire de la façon dont vous proposez

probablement dans votre cas, il serait préférable de mettre une boucle montrant des lignes dans le modèle, alors vous n'aurez pas besoin de la sous-vue et de la boucle dans votre vue principale.

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

et stuff.html

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

ouais je me demandais comment supprimer merci pour l'explication des en-têtes – Roch

Questions connexes