我正在尝试在同一页面上显示2个视图(均来自不同的应用程序)。
我已将视图导入第三个应用程序,我想用它来将两个文件放在一起。目前我能够展示2个应用中的1个。我正在检索应用程序的视图:
def bar(request):
# Get the template
template = loader.get_template('topbar.html')
#render the template and store the outcome in 'render'
render = template.render({}, request)
#return the rendered template
return render
之后,我可以从另一个应用程序中获取此视图:
render = bar(request)
return HttpResponse(render)
这样可以正常显示html文件,但现在我想将第二个视图(可以用同样的方式请求)附加到第一个视图。这可能吗?我是以正确的方式做到的吗?
答案 0 :(得分:0)
听起来您想使用Include标记。
假设您有'myapp/my_template.html'
,并希望在其后面包含'other_app/other_template.html'
的全部内容。您只需将以下内容添加到my_template.html
模板的末尾即可:
{% include 'other_app/other_template.html' %}
这将使用当前上下文呈现包含的模板。也就是说:来自当前模板的变量可用于包含的模板。
答案 1 :(得分:0)
第一点:在您的示例中,bar()
不是正确的视图 - 它返回一个unicode字符串(呈现模板的结果),而不是HttpResponse
,因此您可以不< / em>将其用作视图。
第二点:正如我上面提到的,bar()
返回的只是一个简单的unicode字符串。如果你有一个函数foo()
,它会渲染另一个模板并返回结果(另一个unicode字符串),你可以当然连接这两个字符串 - 实际上,你使用模板来构建那些两个字符串是完全无关的。
现在连接这两个字符串会产生有效的html(假设你使用模板来生成html)是另一个问题。两个模板都是单独渲染的,并且两个模板都设计为生成一个完整的html文档,因此您可能最终会得到两个html文档的串联,这不会产生有效的html文档。
所以回答你的问题:
这可能吗?
是的,很明显。
我是以正确的方式做到的吗?
显然不是。实际上,你问题的第一句话是:
我试图在同一页面上显示2个视图
表示缺乏对Django视图的理解。 Django视图是一个可调用的,它接受一个请求(HttpRequest)作为输入并返回一个响应(HttpResponse)作为输出。所以&#34;在页面上显示两个视图&#34;只是没有意义 - 实际上甚至&#34;显示一个视图&#34;没有任何意义,你不会显示&#34;一个视图(http客户端最终可以&#34;显示&#34; http响应本身,但http响应不是视图)。
关于&#34;什么是解决问题的正确方法&#34;,唯一明智的答案是&#34;它取决于&#34; - 首先,我们没有足够的细节(但是#34;足够&#34;可能实际上是#34;对于SO问题来说太多了&#34;),然后可能有多个&#34; ;正确&#34;解决方案,每个都有它的优点和缺点。