有没有办法以从 django 视图中作为上下文传递的一种很好的方式在 html 中显示 json 结果?

Posted

技术标签:

【中文标题】有没有办法以从 django 视图中作为上下文传递的一种很好的方式在 html 中显示 json 结果?【英文标题】:Is there a way to display json results in html in a nice way passed as a context from django view? 【发布时间】:2021-02-26 04:31:31 【问题描述】:

我有我的 django 视图,它返回一个 json 并将其作为上下文传递给我的 html 模板,但不幸的是,我找不到一个好的方法循环遍历 html 模板(使用 Bootstrap 4 cdn)中的所有结果用他们的缩略图格式化。这是我的看法

from __future__ import unicode_literals
from django.shortcuts import render
from django.http import HttpResponse
from django.template import loader
from youtubesearchpython import SearchVideos
import urllib.parse
import json

def index(request):

    if request.method == 'POST':
        query = request.POST['video_name']
     
        search = SearchVideos(str(query), offset = 1, mode = "json", max_results = 10)

        ytresults = search.result()

        result_dict = json.loads(ytresults)

        

        context = 
            "result" : result_dict,
           
        template_name = "youloader/results.html"
        return render(request, template_name, context)

    else:
        template_name = "youloader/index.html"
        return render(request, template_name)

在我的模板中,我尝试仅传递上下文键,以便确保结果按预期返回。这是我的模板示例

% extends 'youloader/base.html' %

    % block content %
    <div style="padding-top: 20px">
    
     result 
           
    </div>
    
    
    % endblock %

我已经添加了示例输出

【问题讨论】:

【参考方案1】:

当您将 dict 传递给模板时,可以使用以下方式访问结果

result.search_result

然后,您可以逐一遍历模板中的结果以访问缩略图 URL。

# youloader/results.html
% for video in result.search_result %
    <img src=" video.thumbnails.0 ">
% endfor %

从图片中我可以看到video.thumbnails 是一个列表,您可以选择 0 到 4 的索引来选择图片的大小。

【讨论】:

我尝试了您的解决方案,但不幸的是它不起作用,而是返回错误 TemplateSyntaxError at / Could not parse the rest: '["search_result"]' from 'result["search_result"]' 抱歉@JAXPAROW95,我使用了错误的语法。我现在已经更新了答案。

以上是关于有没有办法以从 django 视图中作为上下文传递的一种很好的方式在 html 中显示 json 结果?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法将变量传递给 Django 中的通用视图?

Django 表单向导 - 将请求传递给视图?

django 根据请求向所有视图添加上下文

如何将表单视图作为 django 中的上下文传递给另一个视图?

将对象从模板传递给 django 视图(控制器)

将值从 Django 视图传递到 AngularJS 插入的模板