Django - 如何渲染 html 并同时返回一个 json
Posted
技术标签:
【中文标题】Django - 如何渲染 html 并同时返回一个 json【英文标题】:Django - How to render html and return a json at the same time 【发布时间】:2019-05-13 14:17:52 【问题描述】:我有一个填充 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/callers,每个人都可以使用/可访问,但由于用户会话,我无法做到这一点。只有登录的用户才能看到 json 数据
【问题讨论】:
这是 http 请求的原生特性。一个请求,一个响应。不是两个回应。你应该改变你的逻辑。一个请求 html,另一个请求 json。 请看我的更新,你觉得怎么样? 您能否提供更多有关您的需求的详细信息?您不能期望从一个视图中得到两个响应。每个视图都可以返回一个 HTML 页面或 JSON 响应。我认为最好在第一个视图中返回一个 HTML 页面,然后在该 HTML 中调用 ajax 从另一个视图获取 json 值。 【参考方案1】:您需要在渲染时添加正确的参数。 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)
【讨论】:
以上是关于Django - 如何渲染 html 并同时返回一个 json的主要内容,如果未能解决你的问题,请参考以下文章
如何在视图 Django 中更改渲染以返回 json [重复]