Django模板如何使用标签和模板过滤器从json dict中获取数据

Posted

技术标签:

【中文标题】Django模板如何使用标签和模板过滤器从json dict中获取数据【英文标题】:Django templates how to use tags and template filters to get data from json dict 【发布时间】:2019-09-28 03:58:39 【问题描述】:

我有 dict,可以在这里看到 https://jsoneditoronline.org/?id=a570322381fc45919a7a03ebad78cbee

但从我目前阅读的内容来看,它更有可能是一个字典列表。我正在尝试显示来自标题、描述、作者和类别等字典的数据,但模板标签没有显示我想要的,尝试使用循环但无法访问它

试过这样的循环

% for items in books %
    % for volumeInfo in items %
         volumeInfo.title 
    % endfor %
% endfor %

只有 books.items 有效,但它给了我整个 json,但我只需要很少的值。

def api(request):
    books = 
    if 'books' in request.GET:
        books = request.GET['books']
        url = 'https://www.googleapis.com/books/v1/volumes?q=%s' % books
        response = requests.get(url)
        books = response.json()
        print(type(books))
        with open("data_file.json", "w") as write_file:
            json.dump(books, write_file)

    return render(request, 'books/api.html', 'books': books)
% load get_item from template_filters %
% block content %
  <h2>Google API</h2>
  <form method="get">
    <input type="text" name="book">
    <button type="submit">search on google books api</button>
  </form>
  % if books %
    <p>
% for items in books %
% for volumeInfo in items %
 volumeInfo.title 
% endfor %
% endfor %
 books.items 
    </p>
  % endif %
% endblock %

【问题讨论】:

【参考方案1】:

您需要遵循您拥有的 JSON 的结构。总结一下,数据是这样的:


  "items": [
    
      "volumeInfo": 
        "title": "Hobbit czyli Tam i z powrotem"
      
    
  ]

所以,在模板中:

% for item in books.items %
   item.volumeInfo.title 
% endfor %

【讨论】:

感谢 Daniel 的澄清和帮助 :)

以上是关于Django模板如何使用标签和模板过滤器从json dict中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

Django 在模板标签中过滤和计数

如何在 Django 模板中嵌套或联合使用两个模板标签?

如何将三个或多个参数传递给自定义模板标签过滤器 django?

使用 Django 模板和标签而不使用 Django 的其余部分

Django—— 模板层:变量过滤器标签自定义标签和过滤器

如何将 Django 的标记模板标签与 Google App Engine WebApp 框架一起使用