Джанго, отображающий вид в другом виде?
-
06-07-2019 - |
Вопрос
Я хотел бы знать, могу ли я отображать представление в другом представлении с помощью django.
Это то, что я пытался сделать:
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)
Вывод выглядит так, как я ожидал, но мне пришлось заменить значение запроса пустой строкой. Это хорошо или есть лучший способ сделать это?
Решение
Ответ http содержит заголовки вместе с html или чем-то еще, поэтому вы не можете просто добавлять их как строки.
если вы хотите модулировать свою функцию представления, затем вызовите процедуры, возвращающие строки, и тогда вы можете сделать это так, как вы предлагаете
Вероятно, в вашем случае было бы лучше поместить цикл, показывающий строки в шаблон, тогда вам не понадобится вспомогательное представление и цикл в основном представлении.
def listEventsSummary(request):
listEventsSummary = Event.objects.all().order_by('-id')[:20]
return render_to_response('stuff.html',{'events':listEventsSummary})
и в stuff.html
{% for event in events %}
<p>{{event.date}} and whatever else...</p>
{% endfor %}