Question

J'aimerais savoir si je peux afficher une vue dans une autre vue avec django.

C'est ce que j'ai essayé de 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 à quoi je m'attendais, mais j'ai dû remplacer la valeur de la demande par une chaîne vide. Cela vous convient-il ou existe-t-il un meilleur moyen de le faire?

Était-ce utile?

La solution

La réponse http contient des en-têtes, ainsi que du code HTML ou autre chose. Vous ne pouvez donc pas les additionner comme des chaînes.

si vous souhaitez modulariser votre vue, vous devez faire en sorte que les appels de sous-procédures renvoient des chaînes, puis vous pouvez le faire comme vous le souhaitez

Dans votre cas, il serait probablement préférable de placer une boucle affichant des lignes dans le modèle. Vous n'aurez plus besoin de la vue secondaire ni 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 dans stuff.html

{% for event in events %}
    <p>{{event.date}} and whatever else...</p>
{% endfor %}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top