Django,如何在另一个视图中显示一个视图?

5 投票
1 回答
1402 浏览
提问于 2025-04-15 16:29

我想知道在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 %}

撰写回答