Django, mostrando una vista in un'altra vista?
-
06-07-2019 - |
Domanda
Vorrei sapere se posso visualizzare una vista all'interno di un'altra vista con django.
Questo è quello che ho provato a fare:
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)
L'output sembra quello che mi aspettavo, ma ho dovuto sostituire il valore della richiesta con una stringa vuota. Va bene o c'è un modo migliore per farlo?
Soluzione
La risposta http contiene intestazioni insieme a HTML o qualsiasi altra cosa, quindi non puoi semplicemente aggiungerle come stringhe.
se vuoi modulare la tua funzione di visualizzazione, allora le chiamate sotto-procedura restituiscono stringhe e puoi farlo nel modo che proponi
Probabilmente nel tuo caso sarebbe meglio mettere un ciclo che mostra le righe nel modello, quindi non avrai bisogno della vista secondaria e del ciclo nella vista principale.
def listEventsSummary(request):
listEventsSummary = Event.objects.all().order_by('-id')[:20]
return render_to_response('stuff.html',{'events':listEventsSummary})
e in stuff.html
{% for event in events %}
<p>{{event.date}} and whatever else...</p>
{% endfor %}