【问题标题】:Populate specific json value to html with django template使用 django 模板将特定的 json 值填充到 html
【发布时间】:2019-01-07 00:47:01
【问题描述】:

我是 json 新手,不熟悉它。

在我的 Django 视图文件中,我只想传递某些 json 值:学校、地址、每个学生的姓名(Andy、Tom、Jack)和 id(Andy.id、Tom.id、Jack.id) 从 Django 视图到 html。如何实现上述情况?

我的json内容是:

{
  "school": "xxx", 
  "address": "xxx", 
  "number": "xxx,
  "students": {
      "Andy": {
        "id": "xxx", 
        "add": "xxx"
      }, 
      "Tom": {
        "id": "xxx", 
        "add": "xxx"
      }, 
      "Jack": {
        "id": "xxx", 
        "add": "xxx"
      }, 
    },  
}

在我的 view.py 中,我有这些代码。 jresult 是 json 字符串,我使用 json.dumps() 来生成 JSON,但它会将所有 json 数据填充到 html 中。 我怎样才能实现上述情况?任何帮助将不胜感激。

def model_form_upload(request):
    if request.method == 'POST':
        form = FileForm(request.POST, request.FILES)
        if form.is_valid():
            file = request.FILES['file'].read()
            jresult = execution(file)
            json_string = json.dumps(jresult, indent=4)

            return render(request,
                          'virus/home.html',
                          {'json_string': json_string})

    else:
        form = FileForm()
    return render(request, 'virus/upload.html', {
        'form': form
    })

我的 home.html 模板:

<body>
    <pre>{{ json_string|safe }}</pre>
</body>

【问题讨论】:

  • 您遇到了什么问题?
  • @SachinKukreja 到目前为止,我使用 json.dumps 并将所有 json 内容呈现到 html。那不是我想要的。我只想要某个 json 值。

标签: python json django django-templates


【解决方案1】:

JSON 对象非常接近 Python 字典。考虑到这一点,如果您只想过滤字典中的某些键,您可以使用字典理解并编写如下内容:

jresult = {k:v for k,v in jresult.items() if k in wanted_keys}

在您在 jresult 上致电 json.dumps 之前。在哪里wanted_keys = ['school', 'address', 'number', 'students']。如果您也在过滤 'students' 字典,则可以针对该特定键执行与上述类似的操作。

【讨论】:

    【解决方案2】:

    您可以跳过使用 json.dumps 并传递 dict 对象,然后在模板中访问键以获取值。

    示例

    <!-- template -->
    
    School: {{ json_dict.school }}
    Address: {{ json_dict.address }}
    <!-- and so on -->
    

    【讨论】:

    • 所以我的 json_dict 会出现在我的代码中吗?你能解释一下吗?非常感谢
    • 是的。我想 jresult 变量是一个 dict 对象,您在其上调用 json.dumps 以获取字符串文字。但是,您不需要它,因为您希望 dict 对象访问 django 模板中的值。
    • 我做不到.. 我的代码:return render(request, 'virus/home.html', jresult) 并在我的 html 中:

      {{ jresult.school }}

    • 更新到return render(request, 'virus/home.html', {'jresult': jresult })
    • 如果你保留这个return render(request, 'virus/home.html', jresult),你可以像School: {{ school }}一样直接在html中访问school
    猜你喜欢
    • 2012-03-03
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 2019-03-02
    相关资源
    最近更新 更多