yzjklove 发表于 2013-1-23 02:21:26

django中使用json做级联选择

使用JSON代替XML做为数据传输是个不错的选择,下面我们看看django中如何使用json。

首先下载json-py的类库,http://blog.ntsky.com/wp-content/uploads/json-py-3_4.zip

我们使用关联select作为例子:

<select name="city_id" id="city_id" onChange="getFacilityOptions(this.value)">   {% if city_list %}   {% for city in city_list %}   <option value="{{city.id}}">{{city.name}}</option>   {% endfor %}   {% endif %}   </select>   <select name="facility_id" id="facility_id" style="display:none">   </select>   

我们选择city时候关联出facility,这里使用jquery的ajax函数

function getFacilityOptions(city_id){       $.ajax({         type: "GET",         url: "/raw/facility_list/"+city_id+"/",         dataType:   "json",         success: function(json){               // 显示设施               $("#facility_id").show();                  var facilitySelect = document.getElementById("facility_id");                                 // 清空               for ( var i=facilitySelect.options.length-1; i>-1; i– ){                   facilitySelect = null;               }                  // 创建select选项               for(i=0;i<json.length;i++){                   facilitySelect.options = new Option();                   facilitySelect.options.text = json.label;                   facilitySelect.options.value = json.text;               }         }      })   }   

通过ajax发送请求得到json数据,然后解析json数据输出select的option

# 城市设施列表   def facility_list(request,city_id):          li = []            city = get_object_or_404(City, pk=city_id)       facility_list = CityFacility.objects.filter(city=city)       for object in facility_list:         d = {}         d['label'] = object.facility.name         d['text'] = object.facility.id                      li.append(d)                  return HttpResponse(json.write(li))   

这里定义了list,里面包含了一组Dictionary

这样级联选择就OK了。选择city发送ajax请求django,django返回json数据,javascript解析json数据得到facility的select选择。
页: [1]
查看完整版本: django中使用json做级联选择