Django-如何呈现HTML并同时返回json

时间:2019-05-13 14:17:53

标签: json django view rendering

我有一个填充json对象的视图,然后,在同一视图的末尾,我将呈现一个html页面,但还返回最终的json。

这可能无关紧要,但json可能是这样的:

{
    "embedToken": "dasfgjasdàgjasdàgasdàgèe-AveryLongToken",
    "embedUrl": "https://app.powerbi.com/let's_go_to_the_lake",
    "reportId": "e615-sfash-9746"
}

我无法修复的行(整天使用所有替代方法尝试)如下:

return render(request, "home.html", jsn)

我的url.py很简单,如下所示:

urlpatterns = [
    path('', HomePageView, name='home'),
]

我目前收到以下错误:

context must be a dict rather than str.

但是我在途中遇到了各种错误,但未成功达到预期的结果(呈现html并同时返回json)。所以我的疑问是,我在基本原则上采用了错误的方法,我应该改变道路吗?

我想尝试将json转换为字典,然后也许将其转换回javascript中的json

我还试图通过将html呈现为django视图并通过javascript ajax请求执行函数调用来拆分请求,如下所示:

function handler1(){
    // there are many other methods like $.get $.getJSON
    $.ajax({
       type: 'GET',
       dataType: 'json',
       url: "http://piedpiper.com/api/callers"
    }).then(function(result) {
        // do something with the result

    });
}

但是我最终了解到,我必须以这种方式创建URL api /调用程序,由于用户会话的原因,我将无法使用该URL api /调用程序,每个人都可以使用。只有登录的用户才能看到json数据

1 个答案:

答案 0 :(得分:0)

您需要在render上添加适当的参数。 Here is the docs for render function in Django

这是视图的示例代码

def post_detail(request, slug=None):
    instance = get_object_or_404(Post, slug=slug)
    share_string = quote_plus(instance.content)
    context = {
        "title": instance.title,
        "instance": instance,
        "share_string": share_string,
    }
    return render(request, "post_detail.html", context)