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?

È stato utile?

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 %}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top