将渲染视图传递给Django中的另一个应用程序视图

问题描述 投票:1回答:1

我正在尝试在同一个网页上显示2个应用程序的输出,但在尝试使用here提议的解决方案时遇到问题。

我有一个“main_app”处理大部分页面的内容,并希望在同一页面上添加“sub_app”(即呈现的<div>元素)的输出。

这是我如何在sub_app视图中收集main_app的输出:

from sub_app.views import sub_app_view #
def main_app_view(request):    
    my_sub_app_html = user_tests(request) #supposed to get rendered HTML content from sub_app
    context = {
                'sub_app_html ': my_sub_app_html,
                }
    return render(request, 'main_app.html', context)

然后在sub_app中的视图:

def sub_app_view(request):
    context = {
                'sub_app_context': "foo",
                }
    return render(request, 'sub_app/sub_app.html', context)

main_app.html包含:

<p>
{{ sub_app_html }}
</p>

sub_app.html

<div id="mydiv">
   {{ sub_app_context }}
</div>

但是,不是从sub_app_view正确显示呈现的HTML,而是在浏览器中的main_app.html中显示的是:

<HttpResponse status_code=200, "text/html; charset=utf-8">

有没有解决方案,或者更好的方式来实现应用程序之间的链接?

django django-templates django-views
1个回答
1
投票

你可以用**做到这一点

javascript和jquery

**

$.ajax({
  type: "get",
  url: url_app_1,
  data: data,
  success: here add your html to your div1,
  dataType: dataType
});
$.ajax({
  type: "get",
  url: url_app_2,
  data: data,
  success: here add your html to your div2,
  dataType: dataType
});

并且在成功中你可以将html附加到你的div

**

Django解决方案:

**

render函数返回一个HttpResponse(content,content_type,status),以获得你需要的模板html:

def main_app_view(request):    
    my_sub_app_html = user_tests(request) 
    context = {
                # you need to get content then decode
                'sub_app_html ': my_sub_app_html.content.decode("utf-8"),
                }
    return render(request, 'main_app.html', context)

这是render的源代码

© www.soinside.com 2019 - 2024. All rights reserved.