Django,如何在另一个视图中显示一个视图?
我想知道在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)
输出结果看起来和我预期的一样,但我不得不把请求的值替换成了一个空字符串。这样做可以吗,还是有更好的方法呢?
1 个回答
5
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 %}