将 requests.get 的结果加载到 Django 模板(画面)中?

Load result from requests.get into django template (tableau)?

我有一个超小(单视图)django 应用程序,它从 tableau 服务器加载一个视图。

我已经使用 trust app method 连接,如果我只是将 URL 放入浏览器,它可以正常加载。

然而,当我尝试在 Django 模板中呈现同一页面时 - Django 尝试加载所有资源,就好像它们存在于本地一样(这不起作用)。

视图如下所示:

def index(request):
    url = os.environ.get("tableau_HOST")
    username = request.user.username
    ticket = get_tableau_ticket(url, username)
    if ticket:
        data = requests.get(url+ticket+'/views/SIPPlan/DashboardView', data={'username': username})
        print(data.text)
    else:
        # Handle the error - not implemented yet
        r = ticket
    return render(
        request,
        "tableau/index.html",
        {
            "tableau_data": data.text,
        },
    )

在我的模板中,它看起来像这样:

{% extends "myapp/base_template.html" %}
{% load static %}
{% block content %}
    {% autoescape off %}
        {{ tableau_data }}
    {% endautoescape %}
{% endblock %}

当我加载视图时 - 我看到它试图从我的本地计算机加载资源(它不应该,它们存在于 tableau 服务器上)。


[09/Aug/2019 08:26:28] "GET /vizql/v_201921906211547/javascripts/formatters-and-parsers.en_US.js HTTP/1.1" 404 3610
Not Found: /vizql/v_201921906211547/javascripts/vqlweb.js
2019-08-09 08:26:28,639 - django.request       WARNING  Not Found: /vizql/v_201921906211547/javascripts/vqlweb.js
[09/Aug/2019 08:26:28] "GET /vizql/v_201921906211547/javascripts/vqlweb.js HTTP/1.1" 404 3544
Not Found: /vizql/v_201921906211547/javascripts/require.min.js
2019-08-09 08:26:28,700 - django.request       WARNING  Not Found: /vizql/v_201921906211547/javascripts/require.min.js

...etc...

但同样 - 如果我只是点击我在浏览器中构建的 URL(未嵌入模板),它会呈现良好。

所以我想我的问题是:有没有一种好的方法可以在 django 模板页面中呈现另一个 HTML 页面?我似乎不知道该怎么做。

要嵌入 Tableau,您应该使用他们的 embed code (script tag) 或使用 Tableau JS API。在幕后,任何一条路线最终都会创建一个带有视图 URL 的 iframe。

您正在做的是从 Tableau 获取 HTML 并将其插入服务器端的网页,然后由您的 Django 服务器提供。当该 HTML 引用的资产尝试加载时,它会查看您的 Django 服务器而不是 Tableau 服务器,因为它是从那里提供服务的。

无需在服务器端请求 HTML,只需将嵌入代码放入您的页面(包括受信任的令牌,请参阅 Tableau's Docs 了解如何执行此操作)并让 Tableau 的嵌入脚本处理一下。