2015-04-23 13 views
1

目前,我有我的搜索功能json_search在我的views.py文件,像这样:Django的:传递API的JSON到模板用在表

def json_search(request): 
    query = request.GET.get('query') 
    api_key = locu_api 
    url = 'https://api.locu.com/v1_0/venue/search/?api_key=' + api_key 
    locality = query.replace(' ', '%20') 
    final_url = url + "&locality=" + locality + "&category=restaurant" 
    json_obj = urllib2.urlopen(final_url) 
    data = json.load(json_obj) 
    json_data = {} 
    return HttpResponse(json.dumps(data), content_type='application/json') 

我目前通过我主页上的表单调用它使用URL这样的:

urlpatterns = patterns(
    "", 
    url(r"^$", TemplateView.as_view(template_name="homepage.html"), name="home"), 
    url(r"^admin/", include(admin.site.urls)), 
    url(r"^account/", include("account.urls")), 
    url(r"^loc_search/$", 'project_name.views.json_search', name="search"), 
) 

我所希望做的是填充表格与字段名称:和电话:API的JSON内我公司目前已在台设立:

<body> 
<table data-toggle="table" data-url="{% url 'search' %}" data-cache="false" data-height="299"> 
<thead> 
    <tr> 
     <th data-field="id">Item ID</th> 
     <th data-field="name">Name</th> 
     <th data-field="phone">Phone</th> 
    </tr> 
</thead> 

我知道目前它只是返回的HttpResponse和倾倒JSON文件,所以我得到了一个空白的HTML页面是这样的:

{"meta": {"limit": 25, "cache-expiry": 3600}, "objects": [{"name": "Pizza Hut delivery", "locality": "Norwich", "website_url": null, "cuisines": [], "region": "Norfolk", "long": 1.27727303158181, "phone": "01603 488900", "postal_code": null, "categories": ["other", "restaurant"], "has_menu": false, "country": "United Kingdom", "lat": 52.6564553358682, "id": "00388fe53e4c9f5e897d", "street_address": null, "resource_uri": "/v1_0/venue/00388fe53e4c9f5e897d/"}, {"name": "Thai Lanna", "locality": "Norwich", "website_url": "http://www.thailannanorwich.co.uk", "cuisines": [], "region": "Norfolk", "long": 1.2788060400004, "phone": "01603 625087", "postal_code": "NR2 1AQ", "categories": ["other", "restaurant"], "has_menu": true, "country": "United Kingdom", "lat": 52.6273547550005, "id": "0452369b7789e15bb624", "street_address": "24 Bridewell Alley", "resource_uri": "/v1 

我只是想知道我究竟是如何通过JSON数据所以我可以缩小搜索范围到我想要的领域,我尝试使用rendor_to_response以及JsonResponse,但我坚持现在只是如何去做这件事。我觉得我必须改变我的搜索功能,但我不知道如何。

被卡住了一段时间,所以任何帮助将非常感激。

+0

JSON字符串不是一个法律问题。 – shellbye

回答

4

终于设法得到它的工作,我有我的views.py:

from django.shortcuts import render 

当时我能够改变我的功能,以满足通过解析对象数据到我的模板,像这样内导入:

def json_search(request): 
query = request.GET.get('query') 
api_key = locu_api 
url = 'https://api.locu.com/v1_0/venue/search/?api_key=' + api_key 
locality = query.replace(' ', '%20') 
final_url = url + "&locality=" + locality + "&category=restaurant" 
json_obj = urllib2.urlopen(final_url) 
decoded_data = json.load(json_obj) 
return render(request, 'loc_search.html', 
        {'objects': decoded_data['objects']}) 

,然后能够把它叫做我的形式提交这样的后:

<ul> 
{% for obj in objects %} 
    <li>{{ obj.name }} - {{ obj.locality }}</li> 
{% endfor %} 
</ul> 

给出了期望的结果:)

enter image description here

有类似的问题,希望有人会发现你给这个有用

+0

感谢这帮了我 –

+0

我得到keyerror对象,可能是什么原因 –