是否可以在django

时间:2017-12-14 07:40:16

标签: python html django django-views

我正在尝试在同一页面上显示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文件,但现在我想将第二个视图(可以用同样的方式请求)附加到第一个视图。这可能吗?我是以正确的方式做到的吗?

2 个答案:

答案 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;解决方案,每个都有它的优点和缺点。