2015-09-14 2 views
3

У меня есть JSON приходит из представления ниже в формате в переменном (AllUsers):Итерация JSON в шаблоне Джанго

{ 
    "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 в моем шаблоне и распечатать в ниже формата. Поэтому в идеале моя петля должна работать 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 нитей я читал .. ..Вы не должны «преобразовывать его в 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) 

Где я буду неправильно в итерации? Пожалуйста, помогите ..

+0

Какой тип имеет AllUser? Это строковый тип? – sinitsynsv

+0

@ user2172884: JSON .... его выбрали из 'redis' через' json.loads' – NoobEditor

+0

Можете ли вы разместить точный вывод 'repr (AllUser)' и 'type (AllUser)'? – GwynBleidD

ответ

3

решения было гораздо проще, чем я думал:

Допустим, у вас есть некоторые JSON, как POST запроса с схемой, как:

"success": true, 
    "users": [ 
    { 
     "userId": "76735142", 
     "username": "user11_01", 
     "email": "[email protected]", 
     "isTest": false, 
     "create_at": "2016-01-29T15:41:16.901Z", 
     "isBlocked": false 
    } 

(Все значения в приведенной выше схеме приведены в качестве примера)

И вы знаете, что для правильного ответа на этот вопрос вам нужно n внутр переменные в вашем почтовом теле:

{ 
"id": "", 
"pass_code": "", 
"search_for": "", 
} 

Далее вам необходимо отправить запрос POST с необходимыми значениями для сервера API:

Прежде всего, необходимо установить необходимые компоненты (из virtualenv):

pip install requests[security] 

[безопасность] флаг необходим для того, чтобы успешного ответа от HTTPS

вида.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> 

Вот оно! Хорошей работы! Если вы возитесь, вы можете получить заголовки событий этого запроса ;-)

3

Вы можете использовать фильтр шаблонов для загрузки 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) 

Затем в Джанго .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

Смежные вопросы