在 django 模板中迭代 JSON
Iterating JSON in a django template
我有一个 json 来自变量中以下格式的视图 (AllUsers
) :
{
"msg": "data found.",
"user": [
{
"fname": "aaa",
"lname": "aaa",
"add": "add1",
"city": "city1",
},
{
"fname": "aaa2",
"lname": "aaa2",
"add": "add2",
"city": "city2",
}
],
"data_status": "active",
"error": false
}
我需要在我的模板中遍历此 JSON 并在下面打印 format.So 理想情况下,在这种情况下我的循环应该 运行 2 次。
name : aaa
name : aaa2
我试过了:
{% for myusers in AllUsers %}
name : {{ user.fname}}
{% end for%}
和
{%with myusers=AllUsers.user%}
{% for user in myusers %}
name : {{ user.fname}}
{% endfor %}
{% endwith %}
但是它们都没有工作,因为循环甚至没有迭代 once.In 我读过的 SO 线程之一 ...你不应该 "convert it to JSON"... . 但这不在我手上...我刚拿到 JSON.
Views
看起来像这样:
def somefucn(request):
data = {
"msg": "data found.",
"AllUsers": AllUser ## This is where the above JSON resides
"data_status": "active",
"error": false
}
return TemplateResponse(request, 'path/to/Template.html', data)
我在迭代中哪里出错了?请帮忙..
您可以使用模板过滤器在模板中加载 json。
创建文件 mytags.py 为 <your-app>/templatetags/mytags.py
mytags.py
的内容为:
import json
from django import template
register = template.Library()
@register.filter
def loadjson(data):
return json.loads(data)
然后在您的 django .htm/.html 模板中加载标签。例如:
{% load mytags %}
{% for foo in YourJsonData|loadjson %}
{{ foo.something }}
{% endfor %}
希望这对您有所帮助。
有关高级模板的详细信息,请参阅:http://www.djangobook.com/en/2.0/chapter09.html#extending-the-template-system
解决方案比我想象的要简单得多:
假设您有一些 JSON 类似 POST 的请求,其架构如下:
"success": true,
"users": [
{
"userId": "76735142",
"username": "user11_01",
"email": "test11@test.com",
"isTest": false,
"create_at": "2016-01-29T15:41:16.901Z",
"isBlocked": false
}
(以上方案中的所有数值均为示例)
而且您知道要正确获得此响应,您需要 post body:
中的下一个变量
{
"id": "",
"pass_code": "",
"search_for": "",
}
接下来您需要向 API 服务器发送包含所需值的 POST 请求:
首先你需要安装必要的组件(从你的 virtualenv):
pip install requests[security]
需要 [security] 标志才能成功响应 HTTPS
VIEWS.PY
import requests
from django.shortcuts import render_to_response
def get_user(request):
args = {}
args.update(csrf(request))
post_data = {'id': '1234', 'pass_code': 'pass', 'search_for': '123456'}
response = requests.post('https://example.com/api/', data=post_data)
args['contents'] = response.json()
return render_to_response('your_templae.html', args)
YOUR_TEMPLATE.HTML
<html>
<head>
<title>testing JSON response</title>
</head>
<body>
<div>
{% for user in contents.users %}
{{ user.userId}}<br>
{{ user.username}}<br>
{% empty %}
Nothing found
{% endfor %}
</div>
</body>
</html>
就是这样!祝你工作愉快!
如果你乱七八糟,你可以事件获取此请求的 headers ;-)
我有一个 json 来自变量中以下格式的视图 (AllUsers
) :
{
"msg": "data found.",
"user": [
{
"fname": "aaa",
"lname": "aaa",
"add": "add1",
"city": "city1",
},
{
"fname": "aaa2",
"lname": "aaa2",
"add": "add2",
"city": "city2",
}
],
"data_status": "active",
"error": false
}
我需要在我的模板中遍历此 JSON 并在下面打印 format.So 理想情况下,在这种情况下我的循环应该 运行 2 次。
name : aaa
name : aaa2
我试过了:
{% for myusers in AllUsers %}
name : {{ user.fname}}
{% end for%}
和
{%with myusers=AllUsers.user%}
{% for user in myusers %}
name : {{ user.fname}}
{% endfor %}
{% endwith %}
但是它们都没有工作,因为循环甚至没有迭代 once.In 我读过的 SO 线程之一 ...你不应该 "convert it to JSON"... . 但这不在我手上...我刚拿到 JSON.
Views
看起来像这样:
def somefucn(request):
data = {
"msg": "data found.",
"AllUsers": AllUser ## This is where the above JSON resides
"data_status": "active",
"error": false
}
return TemplateResponse(request, 'path/to/Template.html', data)
我在迭代中哪里出错了?请帮忙..
您可以使用模板过滤器在模板中加载 json。
创建文件 mytags.py 为 <your-app>/templatetags/mytags.py
mytags.py
的内容为:
import json
from django import template
register = template.Library()
@register.filter
def loadjson(data):
return json.loads(data)
然后在您的 django .htm/.html 模板中加载标签。例如:
{% load mytags %}
{% for foo in YourJsonData|loadjson %}
{{ foo.something }}
{% endfor %}
希望这对您有所帮助。
有关高级模板的详细信息,请参阅:http://www.djangobook.com/en/2.0/chapter09.html#extending-the-template-system
解决方案比我想象的要简单得多:
假设您有一些 JSON 类似 POST 的请求,其架构如下:
"success": true,
"users": [
{
"userId": "76735142",
"username": "user11_01",
"email": "test11@test.com",
"isTest": false,
"create_at": "2016-01-29T15:41:16.901Z",
"isBlocked": false
}
(以上方案中的所有数值均为示例)
而且您知道要正确获得此响应,您需要 post body:
中的下一个变量{
"id": "",
"pass_code": "",
"search_for": "",
}
接下来您需要向 API 服务器发送包含所需值的 POST 请求:
首先你需要安装必要的组件(从你的 virtualenv):
pip install requests[security]
需要 [security] 标志才能成功响应 HTTPS
VIEWS.PY
import requests
from django.shortcuts import render_to_response
def get_user(request):
args = {}
args.update(csrf(request))
post_data = {'id': '1234', 'pass_code': 'pass', 'search_for': '123456'}
response = requests.post('https://example.com/api/', data=post_data)
args['contents'] = response.json()
return render_to_response('your_templae.html', args)
YOUR_TEMPLATE.HTML
<html>
<head>
<title>testing JSON response</title>
</head>
<body>
<div>
{% for user in contents.users %}
{{ user.userId}}<br>
{{ user.username}}<br>
{% empty %}
Nothing found
{% endfor %}
</div>
</body>
</html>
就是这样!祝你工作愉快! 如果你乱七八糟,你可以事件获取此请求的 headers ;-)